代理名称解析服务

MCPF代理名称服务(ANS)提供类似DNS的功能,将人类可读的AI代理名称解析为DID和能力描述,适用于金融服务和医疗健康等场景。

  • by MCPTrustFramework
  • JavaScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 MCPTrustFramework/MCPF-ANS

使用说明

MCPF代理名称服务(ANS)

人工智能代理的人类可读名称 -DNS风格的解析服务,将代理名称映射到DID和功能。

🌟 ANS是什么?

代理名称服务(ANS)为AI代理提供类似DNS的功能:

fraud-detector.risk.bank.example.agent
        ↓
did:web:bank.example.com:agent:fraud-detector
        ↓
{capabilities, endpoints, status, credentials}

基于Veritrust的生产ANS: https://ans.veritrust.vc

特性

  • 🔍 名称解析 -人类可读的名称→ DID+代理卡
  • 📋 代理注册表 -代理元数据的持久存储
  • ✅ 签名回复 -JWS在所有决议上的签名
  • 🔄 版本控制 -同一代理的多个版本
  • ⚡ 状态管理 -活动、暂停、已弃用
  • 🔐 信任整合 -与MCPF合作做vc
  • 🗄️ PostgreSQL后端 -生产就绪数据库
  • 🚀 REST API -简单的HTTP/JSON接口

🚀 快速开始

使用Docker(推荐)

# Clone repository
git clone https://github.com/MCPTrustFramework/MCPF-ans.git
cd MCPF-ans

# Start service
docker-compose up -d

# Verify running
curl http://localhost:4001/healthz
# {"ok":true}

# Resolve an agent
curl 'http://localhost:4001/resolve?name=fraud-detector.risk.bank.example.agent'

手动安装

# Install dependencies
cd src
npm install

# Set up database
createdb mcpf_ans
psql mcpf_ans < db.sql
psql mcpf_ans < mcp/2025_01_add_mcp_registry.sql

# Configure
cp .env.example .env
# Edit .env with your settings

# Run
npm start

📖 api参考

核心终点

解析代理名称

GET /resolve?name={ansName}&version={version}

例子:

curl 'http://localhost:4001/resolve?name=fraud-detector.risk.bank.example.agent'

答复:

{
  "card": {
    "name": "fraud-detector.risk.bank.example.agent",
    "version": "1.0.0",
    "provider": "Example Bank",
    "did": "did:web:bank.example.com:agent:fraud-detector",
    "capabilities": [
      "transaction-analysis",
      "risk-scoring",
      "anomaly-detection"
    ],
    "endpoints": {
      "agent": "https://bank.example.com/agents/fraud-detector",
      "presentations": "https://bank.example.com/agents/fraud-detector/presentations"
    },
    "status": "active",
    "meta": {
      "model": "claude-sonnet-4",
      "certification": "ISO-27001"
    },
    "issued_at": "2025-12-30T12:00:00Z"
  },
  "jws": {
    "compact": "eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ...",
    "kid": "did:web:veritrust.vc#keys-1"
  }
}

注册代理人

POST /register
Content-Type: application/json

{
  "name": "agent-name.zone.example.agent",
  "version": "1.0.0",
  "did": "did:web:example.com:agent:name",
  "provider": "Example Corp",
  "capabilities": ["capability1", "capability2"],
  "endpoints": {
    "agent": "https://example.com/agent",
    "presentations": "https://example.com/agent/vp"
  },
  "status": "active",
  "meta": {}
}

暂停代理

POST /suspend
Content-Type: application/json

{
  "name": "agent-name.zone.example.agent",
  "version": "1.0.0"
}

健康检查

GET /healthz

MCP注册表端点

ANS包括集成的MCP信任注册表:

GET /mcp                    # Registry info
GET /mcp/servers            # List MCP servers
GET /mcp/servers/:did       # Get server by DID
POST /mcp/servers           # Register MCP server
GET /mcp/search             # Search servers
GET /mcp/issuers            # List trusted issuers
GET /mcp/revocations        # Get revocation list

🏗️ 建筑

┌─────────────────────────────────────┐
│  HTTP API (Express.js)               │
│  /resolve, /register, /suspend       │
└──────────────┬──────────────────────┘
               │
┌──────────────┴──────────────────────┐
│  ANS Core                            │
│  • Name validation                   │
│  • Version management                │
│  • JWS signing (JOSE)                │
└──────────────┬──────────────────────┘
               │
┌──────────────┴──────────────────────┐
│  PostgreSQL Database                 │
│  • agent_cards table                 │
│  • mcp_servers table                 │
│  • Indexes on name, status           │
└─────────────────────────────────────┘

🔍 ANS名称格式

ANS名称遵循层次结构:

{identifier}.{zone}.{domain}.agent

示例:

fraud-detector.risk.bank.example.agent
chatbot.customer-service.company.example.agent
diagnostics.imaging.hospital.example.agent

规则:

  • 必须以结尾 .agent
  • 仅限小写字母、数字和连字符
  • 最多253个字符
  • 每个标签最多63个字符
  • 没有连续的连字符

📊 数据库模式

代理卡表

CREATE TABLE agent_cards (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name TEXT NOT NULL,                  -- ANS name
  version TEXT NOT NULL,                -- Semantic version
  did TEXT NOT NULL,                    -- Agent DID
  provider TEXT NOT NULL,               -- Organization
  capabilities JSONB NOT NULL,          -- Array of capabilities
  endpoints JSONB NOT NULL,             -- Service endpoints
  status TEXT NOT NULL DEFAULT 'active', -- active|suspended|deprecated
  meta JSONB NOT NULL DEFAULT '{}',     -- Additional metadata
  created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  UNIQUE(name, version)
);

索引

CREATE INDEX idx_agent_cards_name ON agent_cards (name);
CREATE INDEX idx_agent_cards_status ON agent_cards (status);

🔐 安全

JWS签名

所有ANS响应都使用JSON Web签名(JWS)进行签名:

// Signature generation
const signer = await makeJWSSigner(privateKey, "did:web:ans.example.com");
const jws = await signer.sign(agentCard);

验证:

import { importJWK, jwtVerify } from 'jose';

const publicKey = await importJWK(jwk);
const { payload } = await jwtVerify(jws.compact, publicKey);
// payload contains verified agent card

访问控制

生产部署应保护写端点:

// Add authentication middleware
app.use('/register', requireAPIKey);
app.use('/suspend', requireAPIKey);

🐳 Docker部署

docker-compose.yml

version: '3.8'

services:
  ans:
    build: .
    ports:
      - "4001:4001"
    environment:
      - DATABASE_URL=postgresql://postgres:password@db:5432/mcpf_ans
      - ANS_JWK_JSON=${ANS_JWK_JSON}
      - PORT=4001
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: postgres:16-alpine
    environment:
      - POSTGRES_DB=mcpf_ans
      - POSTGRES_PASSWORD=password
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  postgres_data:

环境变量

# .env
DATABASE_URL=postgresql://user:pass@localhost:5432/mcpf_ans
ANS_JWK_JSON={"kty":"EC","crv":"secp256k1",...}
PORT=4001
NODE_ENV=production

📝 例子

示例1:银行欺诈检测器

# Register agent
curl -X POST http://localhost:4001/register \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "fraud-detector.risk.dbs.example.agent",
    "version": "2.1.0",
    "did": "did:web:dbs.example.com:agent:fraud-detector",
    "provider": "Example Bank",
    "capabilities": [
      "transaction-analysis",
      "risk-scoring",
      "pattern-recognition"
    ],
    "endpoints": {
      "agent": "https://dbs.example.com/agents/fraud-detector",
      "presentations": "https://dbs.example.com/agents/fraud-detector/vp"
    },
    "status": "active",
    "meta": {
      "model": "claude-sonnet-4",
      "certification": "ISO-27001"
    }
  }'

# Resolve agent
curl 'http://localhost:4001/resolve?name=fraud-detector.risk.dbs.example.agent'

示例2:医疗诊断试剂

# Register
curl -X POST http://localhost:4001/register \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "radiology-ai.imaging.hospital.example.agent",
    "version": "3.0.0",
    "did": "did:web:hospital.example.com:agent:radiology",
    "provider": "Example Hospital",
    "capabilities": [
      "xray-analysis",
      "ct-interpretation",
      "tumor-detection"
    ],
    "endpoints": {
      "agent": "https://hospital.example.com/agents/radiology",
      "presentations": "https://hospital.example.com/agents/radiology/vp"
    },
    "status": "active",
    "meta": {
      "model": "medical-ai-v3",
      "certification": "FDA-510k,MOH-Level-3"
    }
  }'

示例3:版本控制

# Register v1.0.0
curl -X POST http://localhost:4001/register \
  -d '{"name":"chatbot.cs.example.agent","version":"1.0.0",...}'

# Register v2.0.0 (breaking changes)
curl -X POST http://localhost:4001/register \
  -d '{"name":"chatbot.cs.example.agent","version":"2.0.0",...}'

# Resolve latest (gets v2.0.0)
curl 'http://localhost:4001/resolve?name=chatbot.cs.example.agent'

# Resolve specific version
curl 'http://localhost:4001/resolve?name=chatbot.cs.example.agent&version=1.0.0'

🧪 测试

# Run tests
npm test

# With coverage
npm run test:coverage

# Integration tests (requires Docker)
npm run test:integration

📈 演出

标准硬件上的基准测试(4 CPU,8GB RAM,PostgreSQL 16):

操作 性能 注意事项
解决(缓存) <5ms 内存缓存命中
解析(未缓存) ~15ms 数据库查询
注册 ~20ms 插入数据库
暂停 ~10ms 简单更新
吞吐量 ~2000请求/秒 单实例

🔗 与MCPF集成

有了MCPF,vc

import { DIDManager } from 'mcpf-did-vc';
import { ANSClient } from 'mcpf-ans';

// Resolve agent name to DID
const ansClient = new ANSClient('https://ans.example.com');
const agentCard = await ansClient.resolve('fraud-detector.risk.bank.example.agent');

// Get DID document
const didManager = new DIDManager();
const didDoc = await didManager.resolve(agentCard.did);

// Verify agent credential
// ... use MCPF-did-vc verifier

使用MCP注册表

ANS包括集成的MCP信任注册表:

// Search for MCP servers
const servers = await fetch('http://localhost:4001/mcp/search?capability=weather')
  .then(r => r.json());

// Get server by DID
const server = await fetch('http://localhost:4001/mcp/servers/did:web:weather.example.com')
  .then(r => r.json());

🤝 贡献

看 贡献.md 作为指导方针。

📝 许可证

MIT许可证-请参阅 许可证

📞 联系

  • 网站: https://mcpf.dev
  • github: https://github.com/MCPTrustFramework/MCPF-ans
  • 问题: https://github.com/MCPTrustFramework/MCPF-ans/issues
  • 讨论: https://github.com/MCPTrustFramework/MCPF-ans/discussions

🙏 致谢

基于生产实施:

  • Veritrust (https://veritrust.vc)-ANS部署现场https://ans.veritrust.vc

🔗 相关项目


版本: 1.0.0-alpha
最后更新时间: 2025年12月31日
状态: 生产就绪(基于Veritrust部署)