AI Skill Hub 推荐使用:DNS-AID核心 是一款优质的MCP工具。AI 综合评分 7.5 分,在同类工具中表现稳健。如果你正在寻找可靠的MCP工具解决方案,这是一个值得深入了解的选择。
DNS-AID核心 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
DNS-AID核心 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
# 方式一:通过 Claude Code CLI 一键安装
claude skill install https://github.com/dns-aid/dns-aid-core
# 方式二:手动配置 claude_desktop_config.json
{
"mcpServers": {
"dns-aid--": {
"command": "npx",
"args": ["-y", "dns-aid-core"]
}
}
}
# 配置文件位置
# macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
# Windows: %APPDATA%/Claude/claude_desktop_config.json
# 安装后在 Claude 对话中直接使用 # 示例: 用户: 请帮我用 DNS-AID核心 执行以下任务... Claude: [自动调用 DNS-AID核心 MCP 工具处理请求] # 查看可用工具列表 # 在 Claude 中输入:"列出所有可用的 MCP 工具"
// claude_desktop_config.json 配置示例
{
"mcpServers": {
"dns-aid__": {
"command": "npx",
"args": ["-y", "dns-aid-core"],
"env": {
// "API_KEY": "your-api-key-here"
}
}
}
}
// 保存后重启 Claude Desktop 生效
DNS-based Agent Identification and Discovery
Reference implementation of the DNS-AID specification, developed at the IETF: https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/.
DNS-AID enables AI agents to discover each other via DNS, using the internet's existing naming infrastructure instead of centralized registries or hardcoded URLs.
uv sync
```bash
pip install "dns-aid[cli,mcp]"
pip install "dns-aid[cli,mcp] @ git+https://github.com/infobloxopen/dns-aid-core.git" ```
For backend-specific extras (route53, cloudflare, ns1, cloud_dns, infoblox, ddns), see the Getting Started Guide.
1. Configure AWS credentials:
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_DEFAULT_REGION="us-east-1" # Optional
Or use AWS CLI profiles:
aws configure
# Or use a named profile
export AWS_PROFILE="my-profile"
2. Verify zone access:
dns-aid zones
3. Publish your agent:
dns-aid publish -n my-agent -d myzone.com -p mcp -e mcp.myzone.com
Infoblox UDDI (Universal DDI) is Infoblox's cloud-native DDI platform. DNS-AID supports creating SVCB and TXT records via the Infoblox API.
| Variable | Required | Default | Description |
|---|---|---|---|
INFOBLOX_API_KEY | Yes | - | Infoblox UDDI API key from Cloud Portal |
INFOBLOX_DNS_VIEW | No | default | DNS view name (zones exist within views) |
INFOBLOX_BASE_URL | No | https://csp.infoblox.com | API base URL |
1. Get your API key from Infoblox Cloud Portal: - Navigate to Administration → API Keys - Create a new API key with DNS permissions - Copy the key (shown only once)
2. Configure environment variables:
export INFOBLOX_API_KEY="your-api-key"
export INFOBLOX_DNS_VIEW="default" # Or your specific view name
3. Identify your zone and view: - In Infoblox Portal, go to DNS → Authoritative Zones - Note the zone name (e.g., example.com) and which view it belongs to
4. Use in Python:
from dns_aid.backends.infoblox import InfobloxBloxOneBackend
from dns_aid.core.publisher import set_default_backend
from dns_aid import publish
# Initialize backend (reads from environment variables)
backend = InfobloxBloxOneBackend()
# Or with explicit configuration
backend = InfobloxBloxOneBackend(
api_key="your-api-key",
dns_view="default", # Your DNS view name
)
set_default_backend(backend)
await publish(
name="my-agent",
domain="example.com",
protocol="mcp",
endpoint="agent.example.com",
capabilities=["chat", "code-review"]
)
⚠️ Important: Infoblox UDDI SVCB records only support "alias mode" (priority 0) and do not support SVC parameters (alpn,port,mandatory). This means Infoblox UDDI is not fully compliant with the DNS-AID draft. The draft requires ServiceMode SVCB records (priority > 0) with mandatoryalpnandportparameters. Infoblox UDDI's limitation is a platform constraint, not a DNS-AID limitation.
| DNS-AID Requirement | Route 53 | Infoblox UDDI |
|---|---|---|
| ServiceMode (priority > 0) | ✅ | ❌ |
alpn parameter | ✅ | ❌ |
port parameter | ✅ | ❌ |
mandatory key | ✅ | ❌ |
For full DNS-AID compliance, use Route 53 or another RFC 9460-compliant DNS provider.
DNS-AID stores alpn and port in TXT records as a fallback for Infoblox UDDI, but this is a workaround and not standard-compliant for agent discovery.
Since Infoblox UDDI zones may not be publicly resolvable, verify records via the API:
async with InfobloxBloxOneBackend() as backend:
async for record in backend.list_records("example.com", name_pattern="my-agent"):
print(f"{record['type']}: {record['fqdn']}")
DDNS (Dynamic DNS) is a universal backend that works with any DNS server supporting RFC 2136, including BIND9, Windows DNS, PowerDNS, and Knot DNS. This is ideal for on-premise DNS infrastructure without vendor-specific APIs.
| Variable | Required | Default | Description |
|---|---|---|---|
DDNS_SERVER | Yes | - | DNS server hostname or IP |
DDNS_KEY_NAME | Yes | - | TSIG key name |
DDNS_KEY_SECRET | Yes | - | TSIG key secret (base64) |
DDNS_KEY_ALGORITHM | No | hmac-sha256 | TSIG algorithm |
DDNS_PORT | No | 53 | DNS server port |
1. Create a TSIG key on your DNS server (BIND example):
tsig-keygen -a hmac-sha256 dns-aid-key > /etc/bind/dns-aid-key.conf
2. Configure your zone to allow updates with the key:
zone "example.com" {
type master;
file "/var/lib/bind/example.com.zone";
allow-update { key "dns-aid-key"; };
};
3. Configure DNS-AID:
export DDNS_SERVER="ns1.example.com"
export DDNS_KEY_NAME="dns-aid-key"
export DDNS_KEY_SECRET="your-base64-secret"
4. Use in Python:
from dns_aid.backends.ddns import DDNSBackend
from dns_aid import publish
backend = DDNSBackend()
# Or with explicit configuration
backend = DDNSBackend(
server="ns1.example.com",
key_name="dns-aid-key",
key_secret="base64secret==",
key_algorithm="hmac-sha256"
)
await publish(
name="my-agent",
domain="example.com",
protocol="mcp",
endpoint="agent.example.com",
backend=backend
)
Cloudflare DNS is ideal for demos, workshops, and quick prototyping thanks to its free tier and excellent API support. DNS-AID fully supports Cloudflare's SVCB record implementation.
| Variable | Required | Default | Description |
|---|---|---|---|
CLOUDFLARE_API_TOKEN | Yes | - | API token with DNS edit permissions |
CLOUDFLARE_ZONE_ID | No | - | Zone ID (auto-discovered if not set) |
1. Create an API token in Cloudflare Dashboard: - Go to My Profile → API Tokens → Create Token - Use the "Edit zone DNS" template or create custom with: - Permissions: Zone → DNS → Edit - Zone Resources: Include → Specific zone → your-domain.com - Copy the token (shown only once)
2. Configure environment variables:
export CLOUDFLARE_API_TOKEN="your-api-token"
# Optional: specify zone ID (otherwise auto-discovered from domain)
export CLOUDFLARE_ZONE_ID="your-zone-id"
3. Publish your first agent:
dns-aid publish \
--name my-agent \
--domain your-domain.com \
--protocol mcp \
--endpoint agent.your-domain.com \
--backend cloudflare
4. Use in Python:
from dns_aid.backends.cloudflare import CloudflareBackend
from dns_aid import publish
# Initialize backend (reads from environment variables)
backend = CloudflareBackend()
# Or with explicit configuration
backend = CloudflareBackend(
api_token="your-api-token",
zone_id="optional-zone-id", # Auto-discovered if not provided
)
await publish(
name="my-agent",
domain="your-domain.com",
protocol="mcp",
endpoint="agent.your-domain.com",
backend=backend
)
```bash
See the examples/ directory:
demo_route53.py - Basic Route 53 publish/discoverdemo_full.py - Complete end-to-end demonstration```bash
export DNS_AID_TEST_ZONE="your-zone.com" python examples/demo_full.py ```
config = SDKConfig(directory_api_url="https://api.example.com")
async with AgentClient(config=config) as client: response = await client.search( q="payment processing", protocol="mcp", capabilities=["payment-processing"], min_security_score=70, verified_only=True, ) for r in response.results: print(f"{r.score:.2f} {r.agent.fqdn} T{r.trust.trust_tier}")
**Zero-trust composition**: Path B → Path A re-verify before invoking. Directory is
opt-in convenience; DNS substrate is the authoritative trust gate.
python async with AgentClient(config=config) as client: response = await client.search(q="fraud detection", min_security_score=70) for candidate in response.results: verified = await dns_aid.discover( candidate.agent.domain, name=candidate.agent.name, require_signed=True, ) # Invoke only when DNS substrate confirms the directory's claim. ```
export DNS_AID_SDK_DIRECTORY_API_URL=https://api.example.com dns-aid search "payment processing" --protocol mcp --min-security-score 70
```python import dns_aid
from dns_aid.sdk import AgentClient, SDKConfig
config = SDKConfig(directory_api_url="https://api.example.com") async with AgentClient(config) as client: rankings = await client.fetch_rankings(limit=10) for r in rankings: print(f"{r['agent_fqdn']}: {r['composite_score']}")
**OpenTelemetry (v0.23.0+):** install `dns-aid[otel]` and set
`otel_enabled=True` (or `DNS_AID_SDK_OTEL_ENABLED=true`) to emit spans +
metrics per invoke and propagate W3C trace context to downstream agents.
See [docs/integrations/opentelemetry.md](docs/integrations/opentelemetry.md).
For advanced usage (connection reuse, OTEL export):
python from dns_aid.sdk import AgentClient, SDKConfig
config = SDKConfig( otel_enabled=True, # Export to OpenTelemetry caller_id="my-app", http_push_url="https://api.example.com/v1/telemetry/signals", )
async with AgentClient(config=config) as client: resp = await client.invoke(agent, method="tools/call", arguments={...}) fqdns = [a.fqdn for a in agents] ranked = client.rank(fqdns) # Rank by local telemetry signals ```
For short-lived credentials (RFC 8693 token exchange, AWS STS assume-role, HashiCorp Vault dynamic secrets, HSM/KMS-backed signing keys), pass an opt-in async credential_provider callback to invoke(). The SDK awaits the callback lazily at invoke time with the target AgentRecord and uses the returned dict for auth resolution. Strictly additive — every existing call site continues to work without source change.
async def token_exchange_provider(agent: AgentRecord) -> dict[str, str]:
# Mint a fresh delegation token per call — e.g., RFC 8693 token exchange
# against Keycloak / Okta / Auth0 / Microsoft Entra ID.
return {"token": await my_idp.exchange_token(subject_token, agent.fqdn)}
async with AgentClient(config=config) as client:
resp = await client.invoke(
agent,
method="tools/list",
credential_provider=token_exchange_provider,
)
Precedence: auth_handler > credentials > credential_provider > no_auth. See docs/security-credentials.md for the per-handler security matrix, audit-trail flow, and the examples/integration_oauth2_token_exchange.py and examples/integration_aws_sts_assume_role.py canonical patterns.
dns-aid discover example.com --use-http-index
python
DNS-AID provides three interfaces. Choose based on your use case:
Best for: Operators, DevOps, and quick manual operations.
dns-aid discover example.com --protocol mcp
| Use Case | Example |
|---|---|
| Manual publishing/discovery | Testing a new agent deployment |
| Shell scripts and automation | cron jobs, deployment scripts |
| Debugging and troubleshooting | Checking DNS records exist |
| Zone management | Listing agents, bulk operations |
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"dns-aid": {
"command": "dns-aid-mcp"
}
}
}
Then Claude can discover and connect to AI agents:
"Find available agents at example.com" "Publish my chat agent to DNS at mycompany.com" "Discover agents at example.com and search for flights from SFO to JFK"
Try the live demo with Claude Desktop:
{
"mcpServers": {
"dns-aid": {
"command": "python",
"args": ["-m", "dns_aid.mcp.server"]
}
}
}
Then ask Claude to discover and use the booking agent:
"Discover agents at example.com using HTTP index, find a booking agent, and search for flights from SFO to JFK on March 15th 2026"
Claude will: 1. Call discover_agents_via_dns → finds booking-agent at https://booking.example.com/mcp 2. Call list_agent_tools → sees search_flights, get_flight_details, check_availability, create_reservation 3. Call call_agent_tool → searches for flights and returns results
┌──────────────────────────────────────────────────────────────────────────┐
│ AGENT DIRECTORY PIPELINE │
│ │
│ ┌──────────┐ ┌───────────────┐ ┌──────────────┐ ┌────────────┐ │
│ │ CRAWLING │──▶│ CURATION │──▶│ INDEXING │──▶│ SERVING │ │
│ │ │ │ │ │ │ │ │ │
│ │ DNS SVCB │ │ trust_score │ │ TSVECTOR │ │ REST API │ │
│ │ HTTP Idx │ │ security_score│ │ full-text │ │ Search │ │
│ │ .well- │ │ telemetry │ │ search │ │ Rankings │ │
│ │ known/ │ │ scoring │ │ │ │ │ │
│ │ agent.json │ │ │ │ │ │ │
│ └──────────┘ └───────────────┘ └──────────────┘ └────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ METADATA ENRICHMENT (Phase 5.5) │ │
│ │ │ │
│ │ GET /.well-known/agent.json │ │
│ │ ├─ "aid_version" present? → Parse as DNS-AID AgentMetadata │ │
│ │ └─ No? → Try A2A Agent Card → Transform to metadata fields │ │
│ │ │ │
│ │ Extracts: transport, auth, capabilities (intent/semantics), │ │
│ │ lifecycle (deprecated, sunset_date, successor) │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘
uv run pytest packages/dns-aid-directory/tests/ uv run pytest packages/dns-aid-crawlers/tests/ uv run pytest packages/dns-aid-k8s/tests/
For background on how DNS-AID compares to other agent-discovery approaches (ANS, Google A2A+UCP, .agent gTLD, AgentDNS, NANDA, Web3, ai.txt) and "The Sovereignty Question", see docs/positioning.md. That content is non-normative — protocol positioning is determined at the IETF.
DNS-AID 是一个用于发现、连接和管理 AI Agent 的核心框架。它通过集成 DNS 机制与 MCP 协议,为开发者提供了一套标准化的 Agent 发现与通信能力,旨在构建一个可信、可扩展的 AI 代理生态系统。
在进行开发或运行工作区包之前,请确保系统中已安装 uv 包管理器。你可以通过执行 `uv sync` 命令来同步并安装所有必要的依赖环境。
你可以通过 PyPI 使用 pip 安装包含 CLI 和 MCP 支持的版本:`pip install "dns-aid[cli,mcp]"`。若需使用 GitHub 上的最新开发版,请使用指定的 git 链接进行安装。此外,针对 Route53、Cloudflare、Infoblox 等特定的后端服务,请参考官方文档中的 Getting Started Guide 进行扩展安装。
项目提供了便捷的 CLI 工具和示例代码。你可以通过命令行快速启动任务,或者参考 `examples/` 目录下的 Python 脚本(如 `demo_route53.py` 或 `demo_full.py`)进行端到端的完整功能演示。
可以通过环境变量 `DNS_AID_SDK_DIRECTORY_API_URL` 配置目录 API 地址。在 Python SDK 中,你可以通过 `SDKConfig` 对象进行初始化。此外,系统支持通过命令行参数进行跨域搜索,并支持设置 `--min-security-score` 等参数来过滤搜索结果。
DNS-AID 提供功能强大的 SDK,支持调用 Agent 并捕获 Telemetry 数据。开发者可以使用 `AgentClient` 进行异步查询与排名获取。针对安全性要求较高的场景,SDK 还支持通过 `credential_provider` 回调函数,在调用时动态获取 AWS STS、HashiCorp Vault 或 KMS 等提供的短期凭证。
项目支持与 Claude Desktop 无缝集成,通过在配置文件中添加 MCP Server 配置,使 Claude 具备发现和连接 AI Agent 的能力。在服务端,项目构建了一套完整的 Agent Directory Pipeline,涵盖了从 DNS SVCB 爬取(Crawling)、数据清洗(Curation)、索引构建(Indexing)到最终服务提供(Serving)的全自动化流程。
高质量的开源MCP工具,实现DNS-based Agent Identification and Discovery
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ Apache 2.0 — 宽松开源协议,可商用,需保留版权声明和 NOTICE 文件,含专利授权条款。
总体来看,DNS-AID核心 是一款质量良好的MCP工具,在同类工具中具备一定竞争力。AI Skill Hub 将持续追踪其更新动态,建议收藏备用,结合自身场景选择合适时机引入使用。
| 原始名称 | dns-aid-core |
| 原始描述 | 开源MCP工具:DNS-based Agent Identification and Discovery - Reference Implementation for IETF。⭐15 · Python |
| Topics | dnsagent-discoveryai-agents |
| GitHub | https://github.com/dns-aid/dns-aid-core |
| License | Apache-2.0 |
| 语言 | Python |
收录时间:2026-05-27 · 更新时间:2026-05-30 · License:Apache-2.0 · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端