MCPサーバー自作|非エンジニアがClaudeを業務専用に拡張する最短ルート

  • URLをコピーしました!

「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 fastmcp

1行目で「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に任せてください。

Claudeに渡すプロンプト例

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に任せられる作業があります。

Claudeに渡すプロンプト例

私の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-clientpip 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から書く必要はありません。

Claudeに渡すプロンプト例(実例②の場合)

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つあります。

  1. フォワードスラッシュ(/)に置き換える: C:/Users/.../server.py と書く(推奨)
  2. バックスラッシュをエスケープする: C:\\Users\\...\\server.py と書く

どちらでも動きますが、見た目がシンプルなのでフォワードスラッシュを推します。Macユーザーは元から / なので気にしなくていいです。

落とし穴②:APIキーの管理(.env と .gitignore)

Notion連携やSlack連携など、外部APIを使うMCPでは「APIキー」が登場します。これをコードに直書きすると、GitHubに上げた瞬間に第三者にバレて悪用されます。

解決策はテンプレ化されています。

# プロジェクト直下に .env を作る
NOTION_TOKEN=secret_xxxxxxxxxxxx
# .gitignore に .env を追加
.env

Pythonコード側では os.getenv("NOTION_TOKEN") で読み込みます。これで「自分のPCでは動くけど、GitHubに上げてもキーは含まれない」状態になります。

.envと.gitignoreの作り方を全部AIに聞いて」が一番早いです。

Claudeに渡すプロンプト例

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が認識されないケース。チェック順は以下です。

  1. .mcp.json の場所: Claude Codeを起動するプロジェクトルートにあるか
  2. JSONの構文: カンマや括弧が抜けていないか(VS Codeで開けばエラー表示される)
  3. server.pyの絶対パス: 相対パスではなく絶対パスで書いているか
  4. 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%割引き)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次