Python MCP服务器示例

包含三个使用Python构建的Model Context Protocol (MCP)服务器示例,演示了不同的认证方法调用Autodesk Platform Services (APS) API。

  • by autodesk-platform-services
  • Python
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 autodesk-platform-services/aps-mcp-server-python

使用说明

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 list

JWT断言包含:

  • iss:您的应用程序客户端ID
  • sub:SSA ID
  • aud:令牌端点URL
  • scope:请求的范围
  • 使用为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: <auth_url>

    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