使用说明
Basecamp MCP服务器
使用FastMCP 2.0构建的MCP服务器,提供与Basecamp API交互的工具。
特性
- 项目发现:列出每个可见的Basecamp项目,并自动分页(无15个项目上限)
- 项目详细视图:获取单个项目,包括其dock元数据和工具端点
- 做概述:使用与项目相同的分页支持浏览待办事项集和列表
- 任务向下钻取:使用丰富的元数据、任务分配和日程安排检查个人待办事项列表和任务
- 任务管理:待办事项的完整CRUD操作-创建、读取、更新、完成和不完成任务
- 任务和日程安排:设置任务的指定人员、完成订阅者、截止日期和开始日期
- 自动令牌刷新:OAuth令牌过期时会自动刷新(无需手动干预)
工具
list_projects
使用完整分页列出经过身份验证的用户可见的所有项目,这样您就不会错过项目。
参数
status(可选):按状态筛选项目;接受archived或trashed。默认为活动状态。
退货 JSON有效载荷 total_projects、应用的筛选器和完整的项目列表。
get_project
获取单个项目,包括显示启用了哪些Basecamp工具的停靠信息。
参数
project_id(必填):项目的数字ID。
退货 JSON blob使用元数据、停靠条目和URL镜像Basecamp API响应。
get_todoset
检索给定项目(bucket)的待办事项集。使用此功能可发现集合中可用的待办事项列表。
参数
bucket_id(必填):项目或桶ID(与project_id).todoset_id(必填):待办事项集的ID,可从以下网址获得get_project.
退货 JSON对象,包含用于下游查询的待办事项集元数据、统计信息和URL。
get_todolists
列出待办事项集中的所有待办事项列表,并自动处理分页。
参数
bucket_id(必填):项目/桶ID。todoset_id(必填):设置ID。status(可选):按以下条件筛选列表archived或trashed。默认为活动状态。
退货 带有计数、过滤器和完整列表集合的JSON有效负载。
get_todolist
获取一个包含完整元数据和导航链接的待办事项列表。
参数
bucket_id(必填):项目/桶ID。todolist_id(必填):列表的ID。
退货 描述列表、完成信息、父引用和URL的JSON对象。
get_todos
检索列表中的每个待办事项,支持状态和完成过滤器。
参数
bucket_id(必填):项目/桶ID。todolist_id(必填):父列表的ID。status(可选):筛选条件archived或trashed.completed(可选):true对于已完成的任务,false等待。
退货 JSON有效负载,包括总计、过滤器和所有匹配待办事项。
get_todo
获取一个包含完整细节的待办事项,包括任务分配、可见性、日程安排和操作URL。
参数
bucket_id(必填):项目/桶ID。todo_id(必填):待办事项的ID。
退货 反映Basecamp待办事项模式的JSON对象。
create_todo
在列表中创建一个新的待办事项,支持与Basecamp的API一致的可选元数据。
参数
bucket_id(必填):项目/桶ID。todolist_id(必填):目的地列表ID。content(必填):任务标题/摘要。description(可选):丰富的HTML描述。assignee_ids(可选):要分配的人员ID列表。completion_subscriber_ids(可选):完成后通知的人。notify(可选):用于触发分配通知的布尔值。due_on(可选):到期日YYYY-MM-DD.starts_on(可选):开始日期YYYY-MM-DD.
退货 JSON有效负载,包括创建的待办事项数据和状态标记。
update_todo
用新值更新现有待办事项。
参数
bucket_id(必填):项目/桶ID。todo_id(必填):要更新的待办事项的ID。content(必填):任务标题/摘要(不能为空)。description(可选):丰富的HTML描述。assignee_ids(可选):要分配的人员ID列表。completion_subscriber_ids(可选):完成后通知的人。notify(可选):用于触发分配通知的布尔值。due_on(可选):到期日YYYY-MM-DD.starts_on(可选):开始日期YYYY-MM-DD.
退货 带有更新的待办事项数据的JSON有效载荷。
重要:您必须传递所有现有参数以及正在更新的参数。省略参数将清除其值。先拿待办事项 get_todo() 以保持现有价值。
complete_todo
将待办事项标记为已完成。
参数
bucket_id(必填):项目/桶ID。todo_id(必填):要完成的待办事项的ID。
退货 JSON确认待办事项已标记为完成。
uncomplete_todo
通过删除已完成的待办事项的完成状态重新打开该待办事项。
参数
bucket_id(必填):项目/桶ID。todo_id(必填):待完成的待办事项的ID。
退货 JSON确认待办事项标记为未完成。
get_people
检索Basecamp帐户中经过身份验证的用户可见的所有人员。
参数
- 无
退货 JSON有效载荷 total_people 人员对象的计数和数组,包括:
- 基本信息(id、姓名、电子邮件、职务、个人简介、位置)
- 角色标志(管理员、所有者、客户、员工)
- 权限(can_manage_projects、can_manage_people)
- 配置文件数据(avatar_url、时区、公司)
- 可用于查找要在中使用的人员ID
assignee_ids创建/更新待办事项时
设置
地方发展
- 安装依赖项:
pip install -r requirements.txt
- 创建一个
.env将您的Basecamp凭据归档:
cp .env.example .env
-
获取您的Basecamp证书:
- OAuth 应用:创建时间https://launchpad.37signals.com/integrations
- 帐户ID:在您的大本营URL中找到它(https://3.basecamp.com/YOUR_ACCOUNT_ID)
-
使用配置身份验证 两种方法之一:
方法A:token.json文件 (建议当地使用)
- 通过OAuth流获取OAuth令牌
- 创建
token.json具有以下结构:
{ "basecamp": { "access_token": "your_access_token", "refresh_token": "your_refresh_token", "expires_at": "2025-12-31T23:59:59Z", "account_id": "your_account_id" } }方法B:环境变量 (建议用于云部署)
- 将这些设置在您的
.env文件:
BASECAMP_ACCESS_TOKEN=your_access_token_here BASECAMP_REFRESH_TOKEN=your_refresh_token_here BASECAMP_TOKEN_EXPIRES_AT=2025-12-31T23:59:59Z BASECAMP_ACCOUNT_ID=your_account_id_here BASECAMP_CLIENT_ID=your_client_id BASECAMP_CLIENT_SECRET=your_client_secret BASECAMP_REDIRECT_URI=your_redirect_uri USER_AGENT="Your App Name (your@email.com)"
FastMCP云部署
对于FastMCP Cloud,仅使用环境变量:
所需的环境变量:
BASECAMP_ACCESS_TOKEN=your_access_token
BASECAMP_REFRESH_TOKEN=your_refresh_token
BASECAMP_TOKEN_EXPIRES_AT=2025-12-31T23:59:59Z
BASECAMP_ACCOUNT_ID=your_account_id
BASECAMP_CLIENT_ID=your_oauth_client_id
BASECAMP_CLIENT_SECRET=your_oauth_client_secret
BASECAMP_REDIRECT_URI=your_redirect_uri
USER_AGENT="Your App Name (your@email.com)"
服务器将在令牌过期时自动刷新令牌(只要提供OAuth凭据)。
运行服务器
python server.py
服务器运行时使用 HTTP传输 上 http://0.0.0.0:8000,适用于FastMCP云部署。
注: 如果您需要stdio传输用于本地MCP客户端集成(例如,Claude Desktop),请更改中的第604行 server.py:
# For FastMCP Cloud (current):
mcp.run(transport="http", host="0.0.0.0", port=8000)
# For local MCP client:
mcp.run(transport="stdio")
分页
服务器通过以下方式自动处理Basecamp的分页:
- 跟随
Link下一页的标题(根据Basecamp API指南) - 汇总所有页面的结果
- 停止时
Link页眉为空(到达最后一页)
这确保您获得所有项目,而不仅仅是API返回的前15个项目。
