使用说明
验证MCP服务器
用于IBM安全验证的模型上下文协议(MCP)服务器 --通过4个智能MCP工具,人工智能驱动访问210多个IBM安全验证REST API。
这是V2 --包括提示、资源、完成、可流式HTTP、TLS和工具注释。 看 V1与V2比较 在......下面
这是什么?
验证MCP服务器网桥 大型语言模型(LLMs) 和 **IBM安全验证(IDaaS)**该服务器没有将210个API端点公开为单独的工具(这将淹没任何LLM上下文窗口),而是将它们合并到 4智能工具 --实现a 减少98% 在代币使用方面。
| 传统方法 | 验证MCP服务器 |
|---|---|
| 210工具定义 | 4工具定义 |
| 约50000个令牌/请求 | 约500个令牌/请求 |
| 上下文溢出风险 | 适合任何LLM上下文 |
| 返回所有结果 | 分页(25/页),相关性排名 |
适用于任何兼容MCP的客户端:Claude Desktop、VS Code、BOB或自定义AI代理。
建筑学
概述
flowchart TB
A(["🤖 AI Assistant"])
B{{"⚙️ Verify MCP Server"}}
AUTH["🔐 OAuth2"]
API["🌐 Verify REST API · 210 endpoints"]
A -->|"MCP Protocol"| B
B -->|"OAuth2 client_credentials"| AUTH
AUTH -.->|"Bearer Token"| B
B -->|"Authenticated Request"| API
API -.->|"JSON Response"| B
B -.->|"AI Response"| A
运作原理
flowchart TB
subgraph CLIENT["MCP Client (LLM / Claude Desktop / AI Agents)"]
U([User Prompt])
end
subgraph MCP["Verify MCP Server"]
direction TB
T{Router}
subgraph TOOLS["4 MCP Tools"]
direction LR
T1["verify_discover\n─────────────\nSearch 210 endpoints\nby keyword/category\nvia hardcoded schema"]
T2["verify_list_categories\n─────────────\nBrowse all 89 API\ncategories with\nendpoint counts"]
T3["verify_get_api_details\n─────────────\nFull parameter schema\nfor any endpoint\nbefore execution"]
T4["verify_execute\n─────────────\nGET/POST/PUT/PATCH/DELETE\nAny Verify API\nendpoint"]
end
subgraph AUTH["OAuth2 Token Handling"]
direction LR
CC["② client_credentials Grant\n→ /v1.0/endpoint/default/token\n→ Bearer Token"]
CACHE["② Token Cache\nAuto-refresh before\nexpiry"]
end
CC --> CACHE
end
subgraph VERIFY["IBM Security Verify (IDaaS)"]
API["REST API\n210 Endpoints"]
subgraph CATEGORIES["API Domains"]
direction LR
C1["Identity\nUsers · Groups\nSCIM v2.0"]
C2["Authentication\nMFA · FIDO2\nOTP · QR"]
C3["Federation\nSAML · OIDC\nWS-Fed"]
C4["Access & Policy\nPolicies · Entitlements\nApplications"]
C5["Privacy\nConsent · DPCM\nPurposes"]
C6["Operations\nEvents · Logs\nReports"]
end
end
U -->|"① HTTP/SSE or stdio"| T
T -->|"③ dispatch to tool"| T1 & T2 & T3 & T4
T1 & T2 & T3 & T4 -->|"④ HTTPS + Bearer token"| API
API --- CATEGORIES
工具工作流程
sequenceDiagram
actor User as User / LLM
participant MCP as MCP Server
participant Verify as IBM Verify API
rect rgb(240, 248, 255)
Note over MCP,Verify: Step ① Auth — OAuth2 client_credentials grant
MCP->>Verify: POST /v1.0/endpoint/default/token
Verify-->>MCP: Bearer token (cached, auto-refreshed)
end
rect rgb(255, 251, 235)
Note over User,MCP: Step ② Discover — find relevant endpoints
User->>MCP: verify_discover(search="users")
MCP-->>User: Matching endpoints with schemas
end
rect rgb(255, 243, 205)
Note over User,MCP: Step ③ Inspect — get full parameter schema
User->>MCP: verify_get_api_details(endpoint_id="getUsers")
MCP-->>User: Full params: count, startIndex, filter, sortBy...
end
rect rgb(209, 250, 229)
Note over User,Verify: Step ④ Execute — read
User->>MCP: verify_execute(method="GET", endpoint="/v2.0/Users", params={count: 10})
MCP->>Verify: GET /v2.0/Users?count=10 [Bearer token]
Verify-->>MCP: SCIM user list
MCP-->>User: JSON results
end
rect rgb(220, 240, 255)
Note over User,Verify: Step ⑤ Execute — write
User->>MCP: verify_execute(method="POST", endpoint="/v2.0/Users", body={...})
MCP->>Verify: POST /v2.0/Users [Bearer token]
Verify-->>MCP: Created user
MCP-->>User: New user details
end
代币效率
graph LR
subgraph NAIVE["❌ Without Verify MCP Server"]
direction TB
NA["210 tool definitions"]
NB["🔴 ~50,000 tokens per request"]
NC["🔴 Context window overflow"]
ND["🔴 LLM must choose from 210 tools"]
end
subgraph META["✅ With Verify MCP Server"]
direction TB
MA["4 tool definitions"]
MB["🟢 ~2,000 tokens per request"]
MC["🟢 Fits any LLM context window"]
MD["🟢 10-turn chat saves ~480,000 tokens"]
end
NAIVE -.->|"98% token reduction"| META
安全
两层安全模型——所有流量都经过端到端的身份验证。
%%{init: {'theme': 'default'}}%%
flowchart LR
subgraph "Layer 1: Client → MCP Server"
A(["AI Assistant"]) -->|"API Key"| B{{"MCP Server"}}
end
subgraph "Layer 2: MCP Server → Verify"
B -->|"OAuth2"| C[("Verify OAuth")]
C -.->|"access_token"| B
B -->|"Bearer token"| D[["Verify REST API"]]
end
style A fill:#e1f5fe
style B fill:#fff3e0
style C fill:#fce4ec
style D fill:#e8f5e9
你能做什么
- 审核整个组织的用户访问权限 --询问“谁有管理员权限?”并获取特权用户、角色和权限的完整清单
- 执行MFA和身份验证策略 --审查和更新多因素身份验证要求、无密码配置和自适应访问规则
- 自动化用户生命周期管理 --从单个对话中跨联合身份源提供、取消提供和修改用户帐户
- 调查身份验证异常 --实时查询登录事件、身份验证失败和可疑活动模式
与兼容
IBM Bob·Claude Desktop·VS Code Copilot·watsonx Orchestrate·任何兼容MCP的AI助手
V1与V2比较
| 功能 | 您可以使用MCP+IBM验证做什么 | V1 | V2 |
|---|---|---|---|
| 4个MCP工具 | 要求AI列出用户、重置MFA、创建组、管理策略、查询审核日志或210个简单语言验证API操作中的任何一个-不需要API文档 | ✅ | ✅ |
| 苏格兰和南方能源公司运输 | 通过HTTP/SSE将任何远程MCP客户端(Claude Desktop、VS Code、BOB)连接到正在运行的服务器,无需本地安装 | ✅ | ✅ |
| stdio运输 | 将服务器作为本地子进程运行——无网络端口,单用户桌面使用零配置 | ✅ | ✅ |
| 密钥库认证 | 使用每个用户的API密钥保护服务器;通过以下方式生成、列出和撤销密钥 /admin/keys 不重新启动 |
✅ | ✅ |
| Docker/K3s | 作为容器发货——在任何服务器、Kubernetes集群或K3s节点上运行;山 /data 密钥持久性卷 |
✅ | ✅ |
| 可流式传输的HTTP | 在负载均衡器后面部署无状态实例;每个请求都是自包含的——支持水平扩展和无服务器 | -- | ✅ |
| 6提示模板 | 要求人工智能“运行过去30天的用户访问审查”或“生成MFA注册报告”,并自动获得一份结构完整、数据驱动的报告 | -- | ✅ |
| 4 MCP资源 | 将实时验证数据显示为可读资源-AI客户端可以浏览API类别、检查端点架构、检查租户状态或读取服务器信息,而无需调用工具 | - | ✅ |
| 自动完成 | 在支持客户端(VS Code等)中键入工具参数时,获取端点ID、类别、HTTP方法和合规性框架的提前键入建议 | -- | ✅ |
| 工具注释 | 人工智能客户端预先知道哪些工具是只读的(可以自由调用),哪些是破坏性的(需要确认)——减少了意外写入 | -- | ✅ |
| 进度通知 | 在长时间运行的Verify API调用期间查看实时进度更新-AI客户端会收到中间步骤的通知,而不仅仅是最终结果 | - | ✅ |
| MCP日志记录 | 服务器端日志事件(信息、警告、错误)实时转发到MCP客户端——在AI工具的实时调试日志窗格中可见 | -- | ✅ |
| TLS支持 | 使用自签名或CA签名的证书通过HTTPS提供服务,这是生产部署和零信任网络策略所必需的 | -- | ✅ |
仅V2组件
| 组件 | 计数 | 它的作用 |
|---|---|---|
| 提示词 | 6 | 预构建报告模板: user_access_review, mfa_enrollment_report, federation_health_report, consent_compliance_report, threat_detection_report, application_onboarding_guide |
| 资源 | 4 | 实时数据表面: verify://categories, verify://endpoints/{id}, verify://server/info, verify://tenant |
| 补全 | -- | 自动完成 endpoint_id, category, method, framework, sso_protocol |
可用工具
| 工具 | 说明 | 用途 |
|---|---|---|
verify_discover |
按关键字或类别搜索终结点 | 找到正确的API-最多返回25个结果,关联。≤3场比赛自动包含全部细节。 |
verify_list_categories |
列出按域分组的所有89个API类别 | 按域浏览完整的API表面(标识、MFA、联盟等) |
verify_get_api_details |
获取特定端点的完整参数架构 | 在调用之前了解所需的参数 |
verify_execute |
执行任何验证API端点 | GET、POST、PUT、PATCH、DELETE任何资源 |
三步LLM工作流程
① verify_discover("users") → find endpoints
② verify_get_api_details("getUsers") → get parameter schema
③ verify_execute(GET, /v2.0/Users, {count: 10}) → actual data
在第一次发现之后,LLM学习模式并停止调用discover——进一步减少了多回合对话中的令牌。
快速开始
先决条件
- Python 3.10+ 或 码头工人
- IBM安全验证租户 具有API访问权限
- API客户端凭据 (
client_id+client_secret)有适当的权利
选项A:Docker(推荐)
docker run -d \
--name verify-mcp \
-p 8004:8004 \
-v verify-mcp-data:/data \
-e VERIFY_TENANT="https://your-tenant.verify.ibm.com" \
-e API_CLIENT_ID="your-api-client-id" \
-e API_CLIENT_SECRET="your-api-client-secret" \
-e MCP_TRANSPORT=sse \
verify-mcp-server
选项B:Python
# Clone
git clone https://github.ibm.com/ashrivastava/verify-mcp-server.git
cd verify-mcp-server
git checkout v2 # or main for v1
# Install
pip install -e .
# Configure
cat > .env << 'EOF'
VERIFY_TENANT=https://your-tenant.verify.ibm.com
API_CLIENT_ID=your-api-client-id
API_CLIENT_SECRET=your-api-client-secret
MCP_TRANSPORT=sse
MCP_PORT=8004
EOF
# Run
python -m src
验证它是否正常工作
# Health check
curl http://localhost:8004/health
# Generate an API key (required for MCP client auth)
# Set a strong MCP_ADMIN_TOKEN in the environment first.
export MCP_ADMIN_TOKEN='replace-with-a-long-random-secret'
curl -X POST http://127.0.0.1:8004/admin/keys \
-H "Authorization: Bearer $MCP_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"user": "admin@in.ibm.com"}'
# List keys
curl http://127.0.0.1:8004/admin/keys \
-H "Authorization: Bearer $MCP_ADMIN_TOKEN"
配置
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
VERIFY_TENANT |
是 | -- | 验证租户URL(例如。, https://mytenant.verify.ibm.com) |
API_CLIENT_ID |
是的 | - | neneneba API客户端ID client_credentials 赠款 |
API_CLIENT_SECRET |
是 | - | neneneba API客户端机密 |
VERIFY_SSL |
没有 | true |
验证SSL证书 |
MCP_TRANSPORT |
没有 | stdio |
运输: stdio, sse,或 streamable-http (v2) |
MCP_HOST |
没有 | 127.0.0.1 |
绑定SSE/可流式传输http的地址(使用 0.0.0.0 集装箱内) |
MCP_PORT |
没有 | 8004 |
SSE/可流式传输HTTP的HTTP端口 |
MCP_ADMIN_TOKEN |
HTTP管理员为“是” | -- | 密码为 /admin/keys (持票人或 X-Admin-Token).在您可以铸造API密钥之前需要。 |
LOG_LEVEL |
没有 | INFO |
日志记录级别 |
TLS_CERT |
否 | -- | TLS证书(v2)的路径 |
TLS_KEY |
否 | -- | TLS私钥(v2)路径 |
运输方式
| 模式 | 标志/环境 | 用例 | 版本 |
|---|---|---|---|
| 标准 | MCP_TRANSPORT=stdio |
克劳德桌面,VS代码(本地) | v1,v2 |
| 上海证券交易所 | MCP_TRANSPORT=sse |
通过HTTP/SSE | v1、v2远程客户端 |
| 可流式传输的HTTP | MCP_TRANSPORT=streamable-http |
无状态、可扩展的部署 | 仅限v2 |
API密钥管理
SSE/HTTP MCP路由为 故障关闭:如果密钥库为空,它们将返回HTTP 503,直到您生成密钥。管理路线需要 MCP_ADMIN_TOKEN (他们确实如此 不 信任客户端IP/lolocalhost检查)。
export MCP_ADMIN_TOKEN='replace-with-a-long-random-secret'
# Generate a new key
curl -X POST http://127.0.0.1:8004/admin/keys \
-H "Authorization: Bearer $MCP_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"user": "bob@in.ibm.com"}'
# List all keys (prefix only)
curl http://127.0.0.1:8004/admin/keys \
-H "Authorization: Bearer $MCP_ADMIN_TOKEN"
# Revoke a key by prefix
curl -X DELETE http://127.0.0.1:8004/admin/keys/<PREFIX> \
-H "Authorization: Bearer $MCP_ADMIN_TOKEN"
然后调用MCP路由 Authorization: Bearer <api_key> 从创建响应中。
API覆盖范围
89个类别--210个端点--9个域
| 域 | 类别 | 操作示例 |
|---|---|---|
| 身份管理 | 用户(SCIM v2.0)、组、动态组、用户自我关怀、身份源 | 列出/创建/更新/删除用户、管理组成员资格、批量操作 |
| 身份验证和MFA | OIDC、密码验证、电子邮件OTP、短信OTP、TOTP、语音OTP、FIDO2、QR登录、知识问题、签名验证、身份验证器 | 注册因素、验证OTP、管理FIDO注册 |
| 联邦 | SAML 2.0、WS联合、OIDC联合、社交JWT交换 | 管理联合、别名、IdP属性映射 |
| 访问和政策 | 访问策略v5.0,应用程序访问、权限、访问请求 | 创建基于风险的策略,管理应用程序访问 |
| 隐私与同意 | 数据隐私管理、同意记录、外部同意提供者 | 创建/更新同意、管理目的、数据使用批准 |
| 配置 | API客户端、OIDC客户端、密码策略、租户属性、主题、适配器 | 管理API客户端、轮换机密、配置策略 |
| MFA配置 | 电子邮件/短信/TOTP/语音OTP配置、FIDO配置、QR配置、身份验证器客户端 | 配置MFA方法,设置OTP策略 |
| 运营 | 事件、报告、查询日志、Webhooks、威胁洞察 | 查询审计日志、导出报告、配置Webhooks |
| 治理 | 认证活动v2.0 | 管理访问认证活动 |
项目结构
verify-mcp-server/
├── src/
│ ├── __init__.py
│ ├── __main__.py # Entry point (python -m src)
│ ├── server.py # MCP server, Starlette app, auth middleware
│ ├── tools.py # 4 MCP tool definitions
│ ├── discovery.py # API schema index (210 endpoints, 89 categories)
│ ├── client.py # HTTP client for Verify API calls
│ ├── auth.py # OAuth2 client_credentials token management
│ ├── config.py # Environment-based configuration
│ ├── keystore.py # API key generation, validation, revocation
│ ├── prompts.py # 6 MCP prompt templates (v2)
│ ├── resources.py # 4 MCP resources (v2)
│ └── completions.py # MCP auto-completions (v2)
├── deploy/
│ └── deploy-appserver.sh # Docker deployment script
├── tests/
│ ├── test_stdio.py # stdio transport tests
│ └── test_sse_e2e.py # SSE end-to-end tests
├── Dockerfile
├── pyproject.toml
├── run.py # WXO entry point (stdio mode)
├── SOLUTION_GUIDE.md # Detailed solution walkthrough
├── CONTRIBUTING.md
├── SECURITY.md
└── LICENSE # Apache 2.0
版本历史记录
| 版本 | 日期 | 亮点 |
|---|---|---|
| 2.0.0 | 2026年4月 | 可流式HTTP、MCP提示(6)、资源(4)、完成、工具注释、TLS、进度通知、MCP日志记录 |
| 1.0.0 | 2026年3月 | 4个元工具,210个端点,SSE+stdio,密钥库认证,Docker支持 |
联系
维护人员: Anuj Shrivastava——美国工业市场服务工程人工智能工程师
📧 ashrivastava@in.ibm.com
如需演示、集成帮助或协作,请通过电子邮件联系。
IBM公共存储库披露
此存储库中的所有内容(包括代码)均由IBM根据相关的开源软件许可证提供,IBM没有义务提供增强、更新或支持。IBM开发人员将此代码作为开源项目(而不是IBM产品)生成,IBM对质量和安全级别没有任何断言,也不会继续维护此代码。