MCP server for Basecamp 3 with OAuth, FastMCP, and 75 tools for projects, todos, messages, card tables, docs, uploads, and search.
Drift inferred · capture-to-capture
tool count over time
60t
60t
transport stdio counts 60 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
archive_todo
-
complete_card
-
complete_card_step
-
complete_todo
-
create_card
-
create_card_step
-
create_column
-
create_comment
-
create_draft_message
-
create_message
-
create_todo
-
create_todolist
-
create_todolist_group
-
delete_card_step
-
delete_todo
-
get_campfire_lines
-
get_card
-
get_card_step
-
get_card_steps
-
get_card_table
-
get_card_tables
-
get_cards
-
get_column
-
get_columns
-
get_comments
-
get_daily_check_ins
-
get_forwards
-
get_inbox
-
get_message
-
get_message_board
-
get_message_categories
-
get_messages
-
get_project
-
get_projects
-
get_question_answers
-
get_todo
-
get_todolist
-
get_todolist_groups
-
get_todolists
-
get_todos
-
global_search
-
move_card
-
move_column
-
put_column_on_hold
-
remove_column_hold
-
reposition_todo
-
reposition_todolist_group
-
search_basecamp
-
trash_todolist
-
uncomplete_card
-
uncomplete_card_step
-
uncomplete_todo
-
unwatch_column
-
update_card
-
update_card_step
-
update_column
-
update_column_color
-
update_todo
-
update_todolist
-
watch_column
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 63b5702 · analyzer v18 · 2h ago
skills & prompt files 1
evidence-backed
findings quoted directly from the published source artifact — not inferred
filesystem 6
- fs georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_client.py :1296
with open(file_path, "rb") as f: - fs georgeantonopoulos-Basecamp-MCP-Server-63b5702/generate_claude_desktop_config.py :11
from pathlib import Path - fs georgeantonopoulos-Basecamp-MCP-Server-63b5702/generate_codex_config.py :12
import shutil - fs georgeantonopoulos-Basecamp-MCP-Server-63b5702/generate_cursor_config.py :11
from pathlib import Path - fs georgeantonopoulos-Basecamp-MCP-Server-63b5702/setup.py :11
from pathlib import Path - fs georgeantonopoulos-Basecamp-MCP-Server-63b5702/token_storage.py :35
with open(TOKEN_FILE, 'r') as f:
shell / exec 2
- shell georgeantonopoulos-Basecamp-MCP-Server-63b5702/generate_codex_config.py :13
import subprocess - shell georgeantonopoulos-Basecamp-MCP-Server-63b5702/setup.py :9
import subprocess
network 3
- net georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_client.py :3
from urllib.parse import unquote, urljoin, urlparse - net georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :15
import httpx - net georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_oauth.py :9
import requests
secrets 1
- secrets georgeantonopoulos-Basecamp-MCP-Server-63b5702/token_storage.py :21
_token_file_env = os.environ.get('BASECAMP_MCP_TOKEN_FILE')
tool registrations 79
- get_projects georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :173
- get_project georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :199
- search_basecamp georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :228
- get_todolists georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :271
- get_todos georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :301
- get_todo georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :332
- create_todo georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :362
- update_todo georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :417
- delete_todo georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :481
- complete_todo georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :513
- uncomplete_todo georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :544
- archive_todo georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :574
- reposition_todo georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :599
- global_search georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :634
- get_comments georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :665
- create_comment georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :701
- get_campfire_lines georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :733
- get_message_board georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :764
- get_messages georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :793
- get_message georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :824
- get_message_categories georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :855
- create_message georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :886
- create_draft_message georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :929
- get_inbox georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :953
- get_forwards georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :983
- get_forward georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1015
- get_inbox_replies georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1046
- get_inbox_reply georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1078
- trash_forward georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1110
- get_card_tables georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1141
- get_card_table georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1171
- get_columns georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1203
- get_cards georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1234
- create_card georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1265
- get_column georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1300
- create_column georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1330
- move_card georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1362
- complete_card georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1393
- get_card georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1423
- update_card georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1453
- get_daily_check_ins georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1488
- get_question_answers georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1521
- update_column georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1556
- move_column georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1588
- update_column_color georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1620
- put_column_on_hold georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1652
- remove_column_hold georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1682
- watch_column georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1712
- unwatch_column georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1742
- uncomplete_card georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1773
- get_card_steps georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1804
- create_card_step georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1835
- get_card_step georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1869
- update_card_step georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1899
- delete_card_step georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1933
- complete_card_step georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1963
- uncomplete_card_step georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :1993
- create_attachment georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2024
- get_events georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2055
- get_webhooks georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2086
- create_webhook georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2116
- delete_webhook georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2147
- get_documents georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2178
- get_document georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2209
- create_document georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2239
- create_draft_document georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2279
- update_document georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2297
- trash_document georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2329
- get_uploads georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2360
- get_upload georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2391
- download_upload georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2421
- download_attachment georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2475
- get_todolist georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2544
- create_todolist georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2566
- update_todolist georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2595
- trash_todolist georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2628
- get_todolist_groups georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2652
- create_todolist_group georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2676
- reposition_todolist_group georgeantonopoulos-Basecamp-MCP-Server-63b5702/basecamp_fastmcp.py :2710
declared dependencies 8
- requests@==2.31.0
- python-dotenv@==1.0.0
- flask@==2.3.3
- flask-cors@==4.0.0
- pytest@==7.4.0
- mcp@[cli]>=1.2.0
- httpx@>=0.25.0
- anyio@>=4.0.0