APS MCP服务器-Python示例
此存储库包含三个最小值 模型上下文协议(MCP) 用Python构建的服务器, 紫外线,以及 FastMCP。每台服务器都演示了不同的身份验证方法用于调用 Autodesk平台服务(APS) API。
| 服务器 | 身份验证方法 | 使用的API | 何时使用 |
|---|---|---|---|
mcp_server_2lo | 客户端凭据(又名两条腿)OAuth流 | OSS | 应用程序拥有的资源,不需要用户上下文 |
mcp_server_ssa | 安全服务帐户 | 数据管理 | 需要用户上下文API的自动化工作流 |
mcp_server_3lo | 授权码(又名3标签)OAuth流 | 数据管理 | 在明确同意的情况下代表真实用户行事 |
\[!提示\] 看 维基 有关这些身份验证模式的更多详细信息。
______________________________________________________________________
项目布局
shared/ # APS helpers shared by all servers
mcp_server_2lo/ # Example MCP server with 2-legged authentication
mcp_server_ssa/ # Example MCP server with Secure Service Account authentication
mcp_server_3lo/ # Example MCP server with 3-legged authentication______________________________________________________________________
先决条件
- Python 3.13+ 和 紫外线
- 对于
mcp_server_2lo:
- 一 APS应用程序 (_传统Web应用程序_ 或 _服务器到服务器_)
- 对于
mcp_server_ssa:
- 一 APS应用程序 (_服务器到服务器_) - A. 安全服务帐户 设置并链接到您的应用程序(请参阅 SSA文档)
- 对于
mcp_server_3lo:
- 一 APS应用程序 (_传统Web应用程序_) - 重定向URI http://localhost:5002/callback 添加到您的应用程序 回调URL 列表
______________________________________________________________________
安装
git clone https://github.com/autodesk-platform-services/aps-mcp-server-python
cd aps-mcp-server-python
uv sync______________________________________________________________________
配置
复制 .env.example 到 .env 并填写以下值:
cp .env.example .env| 变量 | 必填 | 描述 |
|---|---|---|
APS_CLIENT_ID | 所有服务器 | APS应用程序客户端ID |
APS_CLIENT_SECRET | 所有服务器 | APS应用程序客户端机密 |
APS_SSA_ID | mcp_server_ssa | 安全服务帐户ID |
APS_SSA_KEY_ID | mcp_server_ssa | 向SSA注册的密钥对ID |
APS_SSA_KEY_BASE64 | mcp_server_ssa | Base64编码的RSA私钥(PEM) |
要对SSA私钥进行编码:
# macOS
base64 -i private_key.pem
# Linux
base64 -w 0 private_key.pem
# Windows PowerShell
[Convert]::ToBase64String([System.IO.File]::ReadAllBytes( private_key.pem ))______________________________________________________________________
服务器1: mcp_server_2lo
运作原理
服务器调用APS令牌端点 grant_type=client_credentials 使用HTTP基本身份验证(客户端ID+秘密)。生成的令牌与 应用程序标识 并且可以访问应用程序拥有的资源。
sequenceDiagram
participant Client as MCP Client
participant Server as MCP Server
participant APS as APS
Client->>Server: Call tool (e.g. list_buckets)
Server->>APS: POST /authentication/v2/token (client_credentials)
APS-->>Server: access_token (2-legged)
Server->>APS: GET /oss/v2/buckets
APS-->>Server: bucket list
Server-->>Client: bucket list令牌缓存在内存中并重复使用,直到它即将过期。
工具
| 工具 | 说明 |
|---|---|
list_buckets | 列出应用程序拥有的所有OSS存储桶 |
list_objects(bucket_key) | 列出特定存储桶中的对象 |
跑步
uv run fastmcp run mcp_server_2lo/server.py --transport streamable-http --port 5000所需范围
bucket:read data:read
______________________________________________________________________
服务器2: mcp_server_ssa
运作原理
A. 安全服务帐户(SSA) 是可以获得的Autodesk标识 3格代币 无需用户交互。身份验证通过创建一个签名的JWT断言并将其交换为访问令牌来工作:
sequenceDiagram
participant Client as MCP Client
participant Server as MCP Server
participant APS as APS
Client->>Server: Call tool (e.g. list_hubs)
Server->>Server: Build JWT (signed with SSA private key)
Server->>APS: POST /authentication/v2/token (jwt-bearer grant)
APS-->>Server: access_token (3-legged, acting as SSA identity)
Server->>APS: GET /project/v1/hubs
APS-->>Server: hub list
Server-->>Client: hub listJWT断言包含:
iss:您的应用程序客户端IDsub:SSA IDaud:令牌端点URLscope:请求的范围- 使用为SSA密钥对注册的RSA私钥签名
工具
| 工具 | 说明 |
|---|---|
list_hubs | 列出服务帐户可访问的所有集线器 |
list_projects(hub_id) | 列出中心内的项目 |
跑步
uv run fastmcp run mcp_server_ssa/server.py --transport streamable-http --port 5001所需范围
data:read
______________________________________________________________________
服务器3: mcp_server_3lo
运作原理
服务器实现标准 OAuth 2.0授权代码流用户以交互方式登录,并明确同意所请求的范围。轻量级异步HTTP服务器与MCP服务器一起处理OAuth回调。
sequenceDiagram
participant User
participant Client as MCP Client
participant Server as MCP Server
participant APS as APS
User->>Client: List my hubs
Client->>Server: list_hubs()
Server->>Server: No token available
Server->>User: You need to login first:
User->>APS: Open URL in browser, sign in, click "Allow"
APS->>Server: Callback with temporary code
Server->>APS: POST /authentication/v2/token (exchange code)
APS-->>Server: access_token + refresh_token
Server->>Server: Cache tokens in memory
User->>Client: List my hubs
Client->>Server: list_hubs()
Server->>APS: GET /project/v1/hubs (with access_token)
APS-->>Server: hub list
Server-->>Client: hub list工具
| 工具 | 说明 |
|---|---|
list_hubs | 列出经过身份验证的用户可访问的所有集线器 |
list_projects(hub_id) | 列出中心内的项目 |
跑步
uv run fastmcp run mcp_server_3lo/server.py --transport streamable-http --port 5002在这种情况下,OAuth回调端点是 http://localhost:5002/callback。请确保此URL已在您的APS应用程序中注册。
所需范围
data:read
______________________________________________________________________
MCP检验员测试
MCP检查员 允许您以交互方式调用正在运行的MCP服务器上的工具。
# In one terminal, start the server you want to test (e.g. 2LO):
uv run fastmcp run mcp_server_2lo/server.py --transport streamable-http --port 5000
# In another terminal, open the inspector:
npx @modelcontextprotocol/inspector http://localhost:5000/mcp