「Claude Codeに自分の使うサービスをつなぎたい。でもMCPサーバーを自作するなんて、エンジニアじゃないと無理だよね」
ここで止まっている人、多いです。僕も最初はそうでした。
でも、結論から言うとMCPサーバーは「Pythonの関数1個+設定ファイル1個」で動きます。Webサーバーの知識も、認証の仕組みも、難しいフレームワークも要りません。
この記事では、非エンジニアでも今日から1個作れるように、最短ルート3ステップと実用例3本を順番に解説します。読み終わるころには「思ったより軽いな」と感じてもらえるはずです。
この記事で出てくる用語
クリックで開きます
- MCP(Model Context Protocol): AnthropicがClaudeのために作った「AIと外部ツールをつなぐ共通規格」のことです。USB-Cのような統一プラグだと思ってください。
- MCPサーバー: その規格に沿って「Claudeに使わせたい関数」をまとめたPythonのファイル。ネット上のサーバーではなく、自分のPC内で動く小さなプログラム。
- Python(パイソン):Python(パイソン)は、プログラミング言語のひとつで、コンピュータを動かすことやシステムを構築すること、アプリを開発することに使えるものです。
- FastMCP: MCPサーバーを最小コードで書けるPython用のフレームワーク。公式SDKに統合されています。
- デコレータ: 関数の上に
@xxxと書くだけで、その関数に特別な役割を付ける仕組み。「この関数をMCPツールとして登録します」の宣言に使います。 - stdio: 標準入出力という通信方式。MCPサーバーをClaude Codeが起動時に立ち上げ、文字のやりとりだけで動かす一番シンプルな方式です。
- 環境変数: APIキーなどの秘密情報を、コードに直接書かずに別ファイル(.env)から読み込む仕組み。
MCPサーバーは「Python関数+デコレータ1行」でできる

「サーバー」と聞くと身構える人が多いです。でも、MCPの世界では「サーバー」はWebサーバーとは別物です。
実態は「Claudeが呼び出せるPython関数の集まり」だと思ってください。
ここでまず、MCPサーバーの正体を3つの角度から分解していきます。
「サーバー」と聞いて身構える必要がない理由
普通の「サーバー」は、ネットに公開して、世界中からアクセスを受け付けて、認証してログを取って、と山ほどの仕事があります。MCPサーバーはこれを全部やりません。
個人で使うMCPサーバーは、自分のPCの中だけで動きます。Claude Codeが裏でこっそり立ち上げて、終わったら閉じる。それだけです。
「ネットに公開する作業がある」と思って身構えていた人は、ここで一回深呼吸してください。
やることはPythonファイルを1個置くだけです。
MCPサーバーが提供する3つの要素
MCPサーバーがClaudeに渡せるものは3種類あります。
| 要素 | 役割 | 非エンジニア向けの例 |
|---|---|---|
| Tool(ツール) | Claudeに「実行させたい関数」 | 「RSSを取得する」「Notionにメモを保存する」 |
| Resource(リソース) | Claudeに「読ませたいデータ」 | 「自分の文体ルール集」「商品マスタ」 |
| Prompt(プロンプト) | Claudeに「使い回させたい指示文」 | 「ブログ記事構成テンプレ」「コピー添削プロンプト」 |
最初に作るのは Tool(ツール)でいいです。残り2つは「あとから足せる」と覚えておけばOKです。
3つ全部覚える必要はありません。Toolだけで、業務の8割は自動化できます。
個人利用は「stdio」一択でいい
MCPサーバーをClaudeにつなぐ方法は3種類あります。stdio、SSE、Streamable HTTPの3つです。難しそうな名前ですが、覚える必要はないです。
個人ブロガーならstdio一択で問題ありません。stdioは「Claude Codeが起動時にPythonを立ち上げて、文字でやりとりする」一番シンプルな方式です。
ネット越しに動かすSSEやStreamable HTTPは、チームで共有する場合や、複数のPCから同じMCPサーバーを呼びたい場合だけ。個人利用では一切使いません。

自作の最短ルート3ステップ
flowchart LR
A["<b>STEP 1</b><br/>環境準備<br/>Python 3.10+<br/>fastmcp install"]:::stepBox --> B["<b>STEP 2</b><br/>関数を1個書く<br/>@mcp.tool()<br/>デコレータ"]:::stepBox
B --> C["<b>STEP 3</b><br/>.mcp.json<br/>5行で登録<br/>Claude再起動"]:::stepBox
C --> D["<b>15分で完成</b><br/>自作MCP稼働"]:::goalBox
classDef stepBox fill:#FAF3E7,stroke:#6B4423,stroke-width:2px,color:#6B4423
classDef goalBox fill:#FCD34D,stroke:#6B4423,stroke-width:3px,color:#6B4423ここから具体的な手順に入ります。3ステップで「最初の1個」が動きます。
各ステップで「これをAIに任せていい」と「これは自分で判断する」を分けて書くので、自分でやる範囲を最小にできます。
ステップ①:Python 3.10以上+FastMCPをインストール
最初にやることは2つだけです。Python 3.10以上が入っているか確認して、FastMCPをインストールする。それだけ。
ターミナル(WindowsならPowerShell、Macならターミナル)で次の2行を打ちます。
python --version
pip install fastmcp1行目で「Python 3.10.x」以上が表示されればOK。古い場合はPython公式サイトからアップデートしてください。
2行目で FastMCP がインストールされます。これで土台は完成です。所要時間は5分。
ここで詰まる人の典型は「Python 3.9以下を使っている」パターン。
MCP公式SDKは Python 3.10 以上が要件です。バージョンが合わないと「pip installは通るけど動かない」という地味に厄介な状態になります。
ステップ②:server.py に関数を1個書いて @mcp.tool() を付ける
次はPythonファイルを1つ作ります。server.py という名前で、好きな場所に置いてください。中身はこの10行だけです。
from fastmcp import FastMCP
mcp = FastMCP("my-first-mcp")
@mcp.tool()
def add(a: int, b: int) -> int:
"""2つの数を足し算します"""
return a + b
if __name__ == "__main__":
mcp.run()このコードが何をしているか、1行ずつ説明します。
1行目「from fastmcp import FastMCP」は「FastMCPという道具を使います」という宣言です。日本語でいうと「箱を用意します」と書いているだけ。
3行目「mcp = FastMCP(“my-first-mcp”)」で、自作MCPに名前を付けます。”my-first-mcp” の部分は自由に変えていい場所です。
5行目「@mcp.tool()」が今回の主役です。この1行が「次に書く関数を、ClaudeにMCPツールとして登録します」という宣言になります。
6〜8行目で「足し算する関数」を書きました。型ヒント(int)とdocstring(”””…”””)を入れておくと、FastMCPがそれを読み取って「足し算ツール」のスキーマを自動で作ってくれます。
つまり、API仕様書を別途書く必要がない。関数自体が仕様書になります。
「Pythonコードを自分で書くのが不安」という人は、AIに任せてください。
FastMCPで「2つの数を足し算する」MCPツールを書いてください。
関数名は add、@mcp.tool() デコレータ付き、型ヒントとdocstring必須。
import文から最後の mcp.run() まで含めた完全なコードを出力してください。
このプロンプトをClaudeに投げれば、上のコードと同等のものが3秒で返ってきます。自分で書く必要はゼロです。
ステップ③:.mcp.json に5行書いてClaude Codeを再起動
最後の仕上げ。Claude Codeに「君の自作MCPを使えるようにしてね」と教えます。
プロジェクトのルートフォルダ(Claude Codeを起動する場所)に .mcp.json というファイルを作って、次の内容を書きます。
{
"mcpServers": {
"my-first-mcp": {
"command": "python",
"args": ["D:/projects/my-first-mcp/server.py"]
}
}
}“D:/projects/my-first-mcp/server.py” の部分は、ステップ②で作った server.py の絶対パスに書き換えます。Windowsの場合、バックスラッシュ(\)ではなくフォワードスラッシュ(/)を使うのがコツです。
書いたらClaude Codeを再起動してください。これで「addツール」がClaudeに認識されます。
ここでもAIに任せられる作業があります。
私のserver.pyのパスは D:\projects\my-first-mcp\server.py です。
Windowsで動くClaude Codeの .mcp.json を、フォワードスラッシュ形式で書いてください。
サーバー名は my-first-mcp にします。
パス記法の地味なミスは、AIが一発で直してくれます。
ここまでの3ステップ、所要時間は15分です。コーヒーを淹れている間に終わります。Claude Codeで「使う側」のMCPを体系的に整理した解説はClaude Code × MCP活用ガイドに書きました。先に読んでおくと、自作の方向性が見えやすくなります。
「自分の業務をMCP化」する3つの実例

最初の1個が動いたら、次は「自分の業務」をMCP化します。ここでは個人ブロガー・コンテンツクリエイターに刺さる3つの型を紹介します。
足し算ツールは練習用なので、捨てて大丈夫です。本番はここから。
実例①:RSS監視MCP(毎朝のリサーチ自動化)
「ブログのネタ探しのために、毎朝5サイトのRSSを巡回している」という人に効きます。
RSSを取得する関数1つを書いて、@mcp.tool() を付ける。これだけで「最近のAI業界の更新だけ抜き出して」と自然言語でClaudeに頼めるようになります。
from fastmcp import FastMCP
import feedparser
mcp = FastMCP("rss-watcher")
@mcp.tool()
def get_latest_feeds(url: str, limit: int = 10) -> list:
"""指定したRSS URLから最新記事のタイトルとリンクを取得します"""
feed = feedparser.parse(url)
return [
{"title": entry.title, "link": entry.link}
for entry in feed.entries[:limit]
]
if __name__ == "__main__":
mcp.run()このコードは「RSSのURLを受け取って、最新記事のタイトルとリンクをリストで返す」関数です。
feedparser は事前に pip install feedparser でインストールが必要です。Pythonの追加部品をインストールする命令だと覚えればOK。
これが動けば、Claude Codeで
「TechCrunch(テッククランチ)の最新10件を取って、AI関連だけ要約して」
と日本語で指示するだけで動きます。
毎朝のリサーチを「ブラウザで5タブ開く作業」から「Claudeに1行投げる作業」に圧縮できる。これが自作MCPの威力です。
実例②:ローカルMarkdown横断検索MCP
ObsidianやNotionのエクスポートなど、ローカルにMarkdownメモが大量にある人向け。
「過去メモから記事の素材を引き出したい」「あのテーマで何か書いた気がするけど、どこだったか思い出せない」を1秒で解決できます。
from fastmcp import FastMCP
from pathlib import Path
mcp = FastMCP("md-search")
@mcp.tool()
def search_markdown(folder: str, keyword: str) -> list:
"""指定フォルダ配下のMarkdownファイルから、キーワードを含むファイルを検索します"""
results = []
for md_file in Path(folder).rglob("*.md"):
content = md_file.read_text(encoding="utf-8")
if keyword in content:
results.append({
"path": str(md_file),
"preview": content[:200]
})
return results
if __name__ == "__main__":
mcp.run()このコードは「フォルダとキーワードを受け取って、そのキーワードを含むMarkdownファイル一覧を返す」関数です。
pathlib はPython標準の部品なので、追加インストール不要です。rglob("*.md") は「フォルダ配下のすべての.mdファイルを再帰的に探す」という意味。
Claude Codeで「Obsidianの『コピーライティング』フォルダから『PASONA』を含むメモを全部引っ張って」と頼めば、関連メモのパスとプレビューが一覧で返ってきます。
過去の自分のメモが、検索可能な「自分専用ナレッジベース」に変わる瞬間です。
実例③:Notion自動取得MCP(メモを記事素材に)
Notionに業務メモやアイデアをため込んでいる人向け。NotionのAPI経由でデータベースを取ってこられるようにします。
from fastmcp import FastMCP
from notion_client import Client
import os
mcp = FastMCP("notion-fetcher")
notion = Client(auth=os.getenv("NOTION_TOKEN"))
@mcp.tool()
def get_notion_pages(database_id: str, limit: int = 10) -> list:
"""Notionデータベースから最新ページのタイトルと中身を取得します"""
response = notion.databases.query(
database_id=database_id,
page_size=limit
)
return [
{
"title": p["properties"]["Name"]["title"][0]["plain_text"],
"id": p["id"]
}
for p in response["results"]
]
if __name__ == "__main__":
mcp.run()notion-client は pip install notion-client で入れます。
ポイントは2つ。1つ目は NOTION_TOKEN という環境変数を使っていること。Notion APIキーをコードに直接書くのは事故のもとなので、.env ファイルに書いて os.getenv で読み込みます。
2つ目は database_id を引数で受け取っていること。これでClaudeに「メモDBのID渡すから、最新10件のタイトル取って」と頼めます。
Notionトークンの取得方法はNotion API公式ガイドに従います。最初の1回だけ設定すれば、あとはClaudeから自由にメモを呼び出せるようになります。
ここまで3つの実例を見てきました。どれも関数の中身は20〜30行程度。コードを1から書く必要はありません。
FastMCPで「指定フォルダ配下のMarkdownファイルからキーワード検索する」MCPツールを書いてください。
関数名: search_markdown
引数: folder(文字列)、keyword(文字列)
戻り値: パスと先頭200文字のプレビューを含むリスト
pathlibを使用、@mcp.tool()デコレータ付き
業務改善のセンサーは自分が持つ。コードはAIに書かせる。これが非エンジニアの最短ルートです。
ここまでの実例3つは、どれも「自分のPCの中で完結する作業」をMCP化する型でした。MCPより手前で「定型作業をテンプレ化したい」という方は、Claude Skillsで作業を半分にする自作ワークフロー7選も合わせて読むと、Skills→MCPの順で自分の業務に合う方を選べるようになります。
ここまで読んで「自分でも作れそう」と感じた人は、Claude Codeの環境が整っていると一気に進みます。
Claude CodeはClaude Pro(月額$20)またはClaude Max以上のプランで使えます。MCPサーバー連携を本格的に使うなら、思考時間とトークン量に余裕があるMaxプランが快適です。
Claude Pro/Maxの詳細はAnthropic公式ページで確認できます。
無料プランでもClaude Desktopは使えますが、自作MCPを毎日呼ぶような運用には頻度制限がきつめ。1日30分以上Claudeを触る人は、Proプランに切り替えた瞬間に元が取れます。
詰まりやすい4つの落とし穴と回避策
実例3つを見て「やれそう」と感じた人も、手を動かすと小さな壁にぶつかります。事前に潰しておきましょう。
ここで紹介する4つは、僕や周りの非エンジニアがハマったポイントです。
落とし穴①:Windowsのパス指定(バックスラッシュ問題)
.mcp.json のパス指定で一番多いミス。Windowsの標準パスは C:\Users\...\server.py のようにバックスラッシュ(\)で書かれていますが、JSONではバックスラッシュが特殊記号として扱われます。
解決策は2つあります。
- フォワードスラッシュ(/)に置き換える:
C:/Users/.../server.pyと書く(推奨) - バックスラッシュをエスケープする:
C:\\Users\\...\\server.pyと書く
どちらでも動きますが、見た目がシンプルなのでフォワードスラッシュを推します。Macユーザーは元から / なので気にしなくていいです。
落とし穴②:APIキーの管理(.env と .gitignore)
Notion連携やSlack連携など、外部APIを使うMCPでは「APIキー」が登場します。これをコードに直書きすると、GitHubに上げた瞬間に第三者にバレて悪用されます。
解決策はテンプレ化されています。
# プロジェクト直下に .env を作る
NOTION_TOKEN=secret_xxxxxxxxxxxx# .gitignore に .env を追加
.envPythonコード側では os.getenv("NOTION_TOKEN") で読み込みます。これで「自分のPCでは動くけど、GitHubに上げてもキーは含まれない」状態になります。
「.envと.gitignoreの作り方を全部AIに聞いて」が一番早いです。
Pythonプロジェクトで NOTION_TOKEN というAPIキーを安全に管理したいです。
.env ファイルと .gitignore のテンプレを教えてください。
Windows環境で動くことを前提でお願いします。
落とし穴③:Pythonバージョン(3.10未満は動かない)
pip install fastmcp が通っても、python server.py が動かない場合、9割はPythonバージョンが古いです。
ターミナルで python --version を打って、3.10.x 以上であることを確認してください。3.9以下なら、Python公式サイトから最新版をインストールし直します。
複数のPythonバージョンが入っている場合は python3.10 server.py のようにバージョン指定で起動するか、pyenv などのバージョン管理ツールを使います。
落とし穴④:Claude Codeに認識されないとき
.mcp.json を書いてClaude Codeを再起動しても、自作MCPが認識されないケース。チェック順は以下です。
.mcp.jsonの場所: Claude Codeを起動するプロジェクトルートにあるか- JSONの構文: カンマや括弧が抜けていないか(VS Codeで開けばエラー表示される)
- server.pyの絶対パス: 相対パスではなく絶対パスで書いているか
- server.pyを単独実行できるか: ターミナルで
python server.pyしてエラーが出ないか
それでもダメな場合は、mcp dev server.py コマンドで対話的にツールをテストできます。FastMCPに付属の便利機能です。
エラーメッセージが出たら、そのままClaudeに貼り付けて「これ、何が原因?」と聞いてください。9割はその場で解決します。
1個作れば「ツール作りの発想」が変わる|まとめ
flowchart LR
A["<b>自作前</b><br/>誰かが作ったMCPを<br/>『待つ』立場"]:::beforeBox --> C["<b>最初の1個</b><br/>15分で動く<br/>関数1個+設定1個"]:::pivotBox
C --> B["<b>自作後</b><br/>自分の業務に最適化<br/>『作る』立場へ"]:::afterBox
B --> D["<b>Claudeが</b><br/>業務専用の<br/>相棒に変わる"]:::goalBox
classDef beforeBox fill:#FAF3E7,stroke:#6B4423,stroke-width:2px,color:#6B4423
classDef pivotBox fill:#E87A3E,stroke:#6B4423,stroke-width:2px,color:#FFFFFF
classDef afterBox fill:#FAF3E7,stroke:#6B4423,stroke-width:2px,color:#6B4423
classDef goalBox fill:#FCD34D,stroke:#6B4423,stroke-width:3px,color:#6B4423最後にまとめです。
この記事で押さえたポイント
- MCPサーバーは「Pythonの関数1個+設定ファイル1個」で動く
- Webサーバーの知識も認証も不要、自分のPCの中だけで完結する
- 作る順序は「環境準備(5分)→関数を書く(5分)→.mcp.jsonに登録(5分)」の15分
- 業務改善のセンサーは自分、コードはAIに書かせるのが非エンジニアの最短ルート
- 実例3つから1個選んで、まず動かす
最初の1個を選ぶ基準
3つの実例のうち、自分の業務に最も近いものを選んでください。
| 自分の状況 | 最初に作るべき実例 |
|---|---|
| 毎朝RSS巡回している | 実例①: RSS監視MCP |
| ローカルにMarkdownメモが大量にある | 実例②: Markdown横断検索MCP |
| Notionで業務メモを管理している | 実例③: Notion自動取得MCP |
迷ったら実例②(Markdown検索)から始めるのをおすすめします。外部APIキーが要らないので、最も詰まる要素が少ないからです。
自作MCPの真の価値
1個作ると、世界の見え方が変わります。
「これ、Claudeでできたらいいのに」と思う作業が、自分で形にできるようになる。誰かが作ったMCPを「待つ」立場から、自分の業務に最適化したツールを「作る」立場に変わります。
Claudeを「汎用AIアシスタント」から「自分の業務専用に拡張された相棒」に変える鍵が、このMCPサーバー自作です。月数千円のClaude Pro/Maxの環境が整っていれば、自作MCPで投資対効果は何倍にも跳ね上がります。
もしまだClaude Codeを本格運用していない場合は、Anthropic公式のClaude Pro/Maxプランから始めてください。MCPサーバー連携を含めた業務拡張は、有料プランで一気に世界が広がります。
CLAUDE.mdに自作MCPの呼び出しルールを書いておくと、Claudeが自然にツールを使ってくれるようになります。書き方の基礎はCLAUDE.mdの書き方ガイドにまとめてあります。
今日の15分で、最初の1個を動かしてみてください。

🎟️お得な招待コード
Windows/Mac対応の超高速・高精度なAI音声入力ツール
Aqua Voice(1か月間無料でProプラン利用招待コード)
指示1つで計画・実行・成果物まで自律的に仕上げるAIエージェント
Manus(500クレジット獲得招待コード)
安定性・高速性・コスパに優れた国内シェアNo.1のレンタルサーバー
X Server(初回利用料金最大20%割引き)

