Basecamp MCP Integration について
Basecamp MCP Integration は Basecamp 3 向けの MCP サーバーで、OAuth 認証を経た API 呼び出しによりプロジェクトを読み取り、管理します。Codex、Cursor、Claude Desktop から Basecamp を操作したい利用者を想定しています。
主な機能
- 01OAuth 認証による Basecamp 3 API へのアクセス
- 02ToDo、メッセージ、カードテーブル、ドキュメントの管理
- 03プロジェクト横断の検索と担当タスクのレポート
- 04添付ファイルのアップロードとファイルのダウンロード
- 05Codex、Cursor、Claude Desktop 向け設定のローカル生成
活用シーン
- 01AI クライアントからプロジェクトの ToDo を確認し完了にする
- 02複数プロジェクトのメッセージ、コメント、アップロードを検索する
- 03カードテーブル上でカードを別の列へ移動する
MCP 対応
本プロジェクトは MCP サーバーであり、プロジェクト、ToDo、メッセージ、ドキュメント操作などの Basecamp 関連ツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Basecamp MCP Server
Basecamp 3 向けの MCP サーバーです。Codex、Cursor、Claude Desktop などの MCP 対応クライアントから、OAuth 認証による Basecamp API 呼び出しを通じて Basecamp プロジェクトを読み取り、管理できます。
メインサーバーは basecamp_fastmcp.py です。公式の mcp.server.fastmcp Python SDK を使用し、プロジェクト、ToDo、メッセージボード、キャンプファイヤー、カードテーブル、受信トレイへの転送、ドキュメント、アップロード、コメント、イベント、ウェブフック、検索をカバーする 79 個のツールを公開します。
できること
- Basecamp プロジェクトとプロジェクトの詳細を閲覧します。
- プロジェクト、ToDo、メッセージ、キャンプファイヤーの投稿、コメント、アップロード、スケジュールを横断して検索します。
- ToDo リスト、ToDo、ToDo グループ、完了状態を読み取り、管理します。
- 下書きやカテゴリーを含むメッセージボードのメッセージを読み取り、作成します。
- キャンプファイヤーの投稿を読み取ります。
- コメントを読み取り、作成します。
- カードテーブル、列、カード、カードのステップを操作します。
- 受信トレイへの転送と返信を読み取ります。
- 日次チェックインと回答を読み取ります。
- 添付ファイルをアップロードし、アップロード内容を確認します。
- 下書きを含むドキュメントを読み取り、管理します。
- イベントを一覧表示し、ウェブフックを管理します。
- Codex、Cursor、Claude Desktop 用のローカル MCP 設定を生成します。
必要条件
- Python 3.10 以降。
- Basecamp 3 アカウント。
- https://launchpad.37signals.com/integrations から取得した Basecamp OAuth アプリケーション。
- Codex、Cursor、Claude Desktop など、ローカル MCP サーバーを実行できるクライアント。
システムの Python が古い場合は、uv を使用してください。新しい Python バージョンで仮想環境を作成できます。
クイックスタート
リポジトリをクローンして、依存関係をインストールします。
git clone https://github.com/georgeantonopoulos/Basecamp-MCP-Server.git
cd Basecamp-MCP-Server
uv venv --python 3.12 venv
source venv/bin/activate
uv pip install -r requirements.txt
または、python がすでに Python 3.10 以降を指している場合:
python setup.py
サンプルから .env ファイルを作成し、Basecamp OAuth の詳細を入力します。
cp .env.example .env
必須の値:
BASECAMP_CLIENT_ID=your-client-id
BASECAMP_CLIENT_SECRET=your-client-secret
BASECAMP_ACCOUNT_ID=your-account-id
USER_AGENT="Your App Name ([email protected])"
Basecamp で認証します。
python oauth_app.py
http://localhost:8000 を開き、OAuth フローを完了してください。デフォルトでは、トークンはローカルの oauth_tokens.json に保存されます。
MCP クライアントの設定
Codex
python generate_codex_config.py
codex mcp get basecamp
便利なオプション:
python generate_codex_config.py --dry-run
python generate_codex_config.py --legacy
このスクリプトは ~/.codex/config.toml に basecamp サーバーエントリーを書き込み、このチェックアウトの仮想環境と basecamp_fastmcp.py を指定します。
Cursor
python generate_cursor_config.py
その後、Cursor を再起動し、Settings -> MCP を確認してください。サーバーが basecamp として表示されます。
Claude Desktop
python generate_claude_desktop_config.py
その後、Claude Desktop を完全に終了してから、再度開いてください。生成された設定は次の場所に書き込まれます。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
~/AppData/Roaming/Claude/claude_desktop_config.json - Linux:
~/.config/claude-desktop/claude_desktop_config.json
サーバーの確認
stdio 経由で FastMCP サーバーを実行し、ツール一覧を確認します。
printf '%s\n%s\n%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
| python basecamp_fastmcp.py
自動テストを実行します。
python -m pytest tests/ -v
利用可能なツール
FastMCP サーバーは 82 個のツールを公開します。
プロジェクトと検索
get_projectsget_projectsearch_basecampglobal_search
レポート
get_assignable_people— ToDo を割り当て可能なすべてのユーザー (GET /reports/todos/assigned.json)get_person_assignments— すべてのプロジェクトを横断して、1 人のユーザーに割り当てられたすべてのアクティブな未完了 ToDo(GET /reports/todos/assigned/{id}.json、 任意のgroup_by: bucket|date)。1 人のユーザーに割り当てられたすべての ToDo が必要な場合は、プロジェクトを順に調べるよりこちらを優先してください。get_overdue_todos— すべてのプロジェクトにおける期限超過 ToDo を、期限超過期間別にグループ化して表示します (GET /reports/todos/overdue.json)
ToDo
get_todolistsget_todolistcreate_todolistupdate_todolisttrash_todolistget_todosget_todocreate_todoupdate_tododelete_todoarchive_todocomplete_todouncomplete_todoreposition_todoget_todolist_groupscreate_todolist_groupreposition_todolist_group
メッセージ、キャンプファイヤー、チェックイン
get_message_boardget_messagesget_messageget_message_categoriescreate_messagecreate_draft_message
create_message に publish: false を渡すと、すぐに投稿する代わりに下書きメッセージを作成できます。意図する操作が下書きの作成である場合は、エージェントが create_draft_message を直接呼び出すこともできます。
get_campfire_linesget_daily_check_insget_question_answers
コメント
get_commentscreate_comment
カードテーブル
get_card_tablesget_card_tableget_columnsget_columncreate_columnupdate_columnmove_columnupdate_column_colorput_column_on_holdremove_column_holdwatch_columnunwatch_columnget_cardsget_cardcreate_cardupdate_cardmove_cardcomplete_carduncomplete_cardget_card_stepscreate_card_stepget_card_stepupdate_card_stepdelete_card_stepcomplete_card_stepuncomplete_card_step
受信トレイの転送
get_inboxget_forwardsget_forwardget_inbox_repliesget_inbox_replytrash_forward
ドキュメント、アップロード、添付ファイル、イベント、Webhook
create_attachmentget_uploadsget_uploaddownload_upload— Vault の Upload 記録(Docs & Files)をダウンロードし、そのバイト列を MCP コンテンツとして返します(画像 MIME タイプの場合はImageContent、それ以外の場合はEmbeddedResource/BlobResourceContents)。MCP ホストが Blob をモデルに転送するため、PDF、画像、ドキュメントを帯域外の取得なしでネイティブに読み取れます。download_attachment— インラインのコメント/メッセージ添付ファイルを、そのcontent_attachments[].download_urlからダウンロードし、MCP コンテンツとして返します。コメントまたはメッセージ本文に埋め込まれたファイルには、こちらを使用します。インライン添付ファイルは独自の ID を持つAttachmentオブジェクトであり、/uploads/{id}では解決できません。このエンドポイントは 404 を返します。Vault 内の独立した Upload 記録であるファイルには、代わりにdownload_uploadを使用してください。
download_uploadとdownload_attachmentのホスト互換性。 どちらのツールも MCP コンテンツブロックを返します。MCP ホストがImageContent/EmbeddedResource(BlobResourceContents) を転送する場合に限り、モデルはファイルを読み取れます。2026 年 6 月時点の状況:
- Claude Code (CLI) —
application/pdfやその他のバイナリ Blob リソースを含め、完全にサポートされています。- Claude Desktop / claude.ai web — 画像コンテンツブロックは機能しますが、画像以外の
EmbeddedResourceブロックは"Resources of type 'application/pdf' are not currently supported"として拒否されます。バイト列はホストに届きますが、モデルには届きません。クライアントがサポートを追加すれば、サーバーに変更を加えることなく、これらのフロントエンドでもツールが役立つようになります。
get_documentsget_documentcreate_documentcreate_draft_document
create_document に publish: false を渡すと、すぐに公開する代わりに下書きドキュメントを作成できます。意図する操作が下書きの作成である場合は、エージェントが create_draft_document を直接呼び出すこともできます。
update_documenttrash_documentget_eventsget_webhookscreate_webhookdelete_webhook
プロンプトの例
- 「Basecamp のすべてのプロジェクトを表示してください。」
- 「Basecamp で deadline を検索してください。」
- 「プロジェクト 123456 の ToDo リストを取得してください。」
- 「ToDo リスト 987654 に Review PR という名前の ToDo を作成してください。」
- 「プロジェクト 123456 のメッセージボードのカテゴリを表示してください。」
- 「プロジェクトのメッセージボードにお知らせを投稿してください。」
- 「プロジェクト 123456 のカードテーブルの列を表示してください。」
- 「このカードを Done 列に移動してください。」
- 「このプロジェクトの保管庫にアップロードされた最新のファイルを一覧表示してください。」
- 「コメントに添付されたスクリーンショットをダウンロードして、内容を読めるようにしてください。」
アーキテクチャ
basecamp_fastmcp.py:MCP クライアントが使用する FastMCP stdio サーバーです。basecamp_client.py:同期型の Basecamp 3 API クライアントです。search_utils.py:Basecamp のリソースを横断して検索する高レベルのヘルパーです。oauth_app.py:Basecamp 認証用のローカル Flask OAuth フローです。auth_manager.py:API 呼び出しの前に使用する OAuth トークン更新ヘルパーです。token_storage.py:ローカルの OAuth トークンストレージです。generate_codex_config.py:Codex MCP 設定ジェネレーターです。generate_cursor_config.py:Cursor MCP 設定ジェネレーターです。generate_claude_desktop_config.py:Claude Desktop 設定ジェネレーターです。mcp_server_cli.py:互換性とテストのために残されているレガシー JSON-RPC サーバーです。
認証とトークンの保存
推奨される方法は OAuth 2.0 です。
- Basecamp OAuth アプリを作成します。
- クライアント ID、クライアントシークレット、アカウント ID、リダイレクト URI、ユーザーエージェントを
.envに設定します。 python oauth_app.pyを実行します。- http://localhost:8000 でブラウザーのフローを完了します。
デフォルトでは、OAuth トークンは <project>/oauth_tokens.json に保存されます。コンテナー、読み取り専用のチェックアウト、またはマウントされたトークンボリュームを使用する場合は、BASECAMP_MCP_TOKEN_FILE を設定します。
export BASECAMP_MCP_TOKEN_FILE=/var/lib/basecamp-mcp/oauth_tokens.json
OAuth アプリと MCP サーバーは、どちらも同じ変数を読み取ります。token_storage.py はこのパス内の ~ と環境変数を展開し、必要に応じて親ディレクトリを作成します。また、書き込み時にトークンファイルの権限を 0o600 に設定しようとします。親ディレクトリの権限は、引き続きご自身で管理してください。
組み込みの OAuth ウェブサーバーは、コールバックの認証コードが記録されないよう、アクセスログからクエリ文字列を除外します。別のウェブサーバーやリバースプロキシの背後で実行する場合は、そのサーバーのアクセスログでもクエリ文字列を除外するよう設定してください。
トラブルシューティング
MCP クライアントにツールが表示されない場合:
-
仮想環境が存在し、MCP SDK がインストールされていることを確認します。
./venv/bin/python -c "import mcp; print('MCP available')" -
.envにBASECAMP_ACCOUNT_IDが含まれていることを確認します。 -
該当する設定ジェネレーターを再実行します。
-
MCP クライアントを完全に終了してから、再起動します。
認証に失敗した場合:
python oauth_app.py
次に、http://localhost:8000 を開き、Basecamp OAuth フローをもう一度完了してください。
macOS の Claude Desktop では、MCP のログは通常、次の場所にあります。
~/Library/Logs/Claude/
セキュリティに関する注意事項
.envやoauth_tokens.jsonをコミットしないでください。- Basecamp は API クライアントに識別情報を示すよう求めているため、連絡先情報を含む、内容が分かりやすい
USER_AGENTを使用してください。 - トークンファイルは、ローカルストレージまたは適切な権限が設定されたストレージに保管してください。
- このサーバーは、ローカルの MCP クライアントでの使用を想定しています。ネットワーク上に公開する前に、コードとデプロイモデルを確認してください。
ライセンス
MIT。詳細は LICENSE を参照してください。
Star の推移
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。