关于 SQD
SQD 是面向区块链数据分析与调查的 MCP 服务,可查询 SQD Portal 覆盖的多链数据。它提供带覆盖范围、新鲜度、分页和证据元数据的结果,并可选启用内嵌 Explorer。
主要功能
- 01查询 EVM、Solana、Bitcoin、Tron 等链数据
- 02分析钱包、交易、日志和代币转账
- 03提供覆盖范围、新鲜度与证据元数据
- 04支持分页及图表数据描述
- 05可选启用 SQD Explorer 可视化结果
适用场景
- 01追踪钱包的资金流与交易活动
- 02检查合约活动或链上事件
- 03按时间序列分析链上指标
- 04查看 Hyperliquid 价格蜡烛图与成交量
MCP 相关
MCP 服务通过 HTTP 和 stdio 提供区块链查询工具、提示词及工具发现资源。客户端可选择启用 SQD Explorer MCP App;默认情况下,结果以结构化内容和紧凑 JSON 返回。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://portal.sqd.dev/mcpclaude mcp add --transport http subsquid-labs-portal https://portal.sqd.dev/mcp{"mcpServers":{"subsquid-labs-portal":{"type":"http","url":"https://portal.sqd.dev/mcp"}}}在 Cursor 中打开{"servers":{"subsquid-labs-portal":{"type":"http","url":"https://portal.sqd.dev/mcp"}}}在 VS Code 中打开{"mcpServers":{"subsquid-labs-portal":{"type":"http","url":"https://portal.sqd.dev/mcp"}}}{"mcpServers":{"subsquid-labs-portal":{"serverUrl":"https://portal.sqd.dev/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
31| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| vm | enum | 否 | 按 VM 系列筛选evm | tron | solana | bitcoin | substrate | hyperliquid |
| limit | number | 否 | 返回结果的最大数量(默认值:25,最大值:100) |
| query | string | 否 | 按名称、别名或链 ID 搜索 |
| cursor | string | 否 | 上一网络目录页的续传游标 |
| network_type | enum | 否 | 按网络类型筛选mainnet | testnet | devnet |
| real_time_only | boolean | 否 | 仅显示具有实时索引头的网络 |
详细介绍
SQD Portal MCP 服务
一个可从 SQD Portal 数据中回答区块链问题的 MCP 服务:涵盖 EVM、Solana、Bitcoin、Substrate、Hyperliquid 和 Tron 网络上的交易、日志、调用轨迹、代币转账、钱包、分析、时间序列和蜡烛图,并提供可选的内置 Explorer。
该服务本身不会为链建立索引。它会验证输入、规划范围受限的 Portal 查询,并返回带有覆盖范围、新鲜度、分页和证据元数据的结果,让助手能够准确说明自己看到了什么。无需 SQD 账户、API 密钥或客户端凭据。
它通过 HTTP 和 stdio 使用无状态 MCP 2026-07-28 协议,并保留由 SDK 管理的旧版协商路径,以支持仍在逐步采用该修订版的客户端。发布说明见 CHANGELOG.md。如需参与代码开发,请参阅 CONTRIBUTING.md;如需报告漏洞,请参阅 SECURITY.md。
当前公开接口
28个公开工具3个高级/调试工具- 公开参数使用
network - 发现筛选条件使用
vm v0.8.x中没有旧版工具别名
原始查询工具默认返回精简响应。只有在需要更大负载时,才请求 response_format: "full"。
实体问题可以先使用 portal_resolve_entity。它会将 EVM 代币符号/地址、EVM 合约别名、池标识符、协议名称和 Hyperliquid 币种名称解析为可直接用于查询的筛选条件,同时明确标示存在歧义的匹配项。
代币符号解析和代币元数据来自开放的代币列表数据,而非内置的代币地址常量。如果某个网络的代币列表数据不可用、已过时或不受支持,响应中会明确说明。
钱包问题应从 portal_get_wallet_summary 开始。默认情况下,它会返回 fund_flow,包括流入/流出变动、资产流向、交易对手方、观察到的最大变动,以及进行原始工具深入查询的后续证据线索。
工具组
发现:
portal_list_networksportal_get_network_infoportal_get_headportal_resolve_entity
跨链便捷工具:
portal_get_recent_activityportal_get_wallet_summaryportal_get_time_series
EVM:
portal_evm_query_transactionsportal_evm_query_logsportal_evm_query_tracesportal_evm_query_token_transfersportal_evm_get_contract_deploymentportal_evm_get_contract_activityportal_evm_get_analyticsportal_evm_get_ohlc
Solana:
portal_solana_query_transactionsportal_solana_query_instructionsportal_solana_get_analytics
Bitcoin:
portal_bitcoin_query_transactionsportal_bitcoin_get_analytics
Substrate:
portal_substrate_query_eventsportal_substrate_query_callsportal_substrate_get_analytics
Hyperliquid:
portal_hyperliquid_query_fillsportal_hyperliquid_get_analyticsportal_hyperliquid_get_ohlc
Tron:
portal_tron_query_transactionsportal_tron_query_logs
高级/调试:
portal_debug_query_blocksportal_debug_resolve_time_to_blockportal_debug_hyperliquid_query_replica_commands
这些分组也对应工具集(discovery、convenience、evm、solana、bitcoin、substrate、hyperliquid、tron、debug)。部署时可以通过 MCP_TOOLSETS 或 MCP_TOOLS 精简目录;HTTP 连接还可以通过 ?toolsets= 或 X-MCP-Toolsets 标头进一步缩小范围;详情请参阅 HTTP 部署说明。未配置任何选项时,将提供完整的 31 个工具接口;托管端点也保留此默认设置。
支持的数据
- Portal 索引的 EVM 网络,包括 Base、Ethereum、Optimism、Arbitrum、Monad、Hyperliquid EVM 等许多网络
- Tron 原生交易(TRX 转账、TRC-10 转账、带内联日志和内部交易的合约调用)以及 TVM 事件日志(例如 TRC-20 转账),支持 Base58 或十六进制地址、精确的 TRX 金额,并在每条日志中包含父交易哈希;对于其他用法,捆绑的 SQD 插件技能会介绍原始 Stream API
- Solana 主网
- Bitcoin 主网
- Hyperliquid 成交和副本命令
- Portal 索引的 Substrate 网络
目前,Substrate 仅支持历史数据,不支持实时追踪。
响应结构
大多数工具会在 MCP structuredContent 中返回相同的封装结构;对于较旧的客户端,也会以紧凑的 JSON 文本作为回退格式。封装结构包含常规结果正文,以及以下共享元数据:
answerdisplaynext_stepsinvestigation_freshness_coverage_pagination_ordering
investigation 是面向 Agent 的精简证据指南:它会指出主要结果路径、限定范围的时间窗口、有用的转换字段(例如地址或交易哈希)、后续筛选条件,以及将结果视为完整结果之前需要了解的限制。成功且包含实质内容的结果还会附带 _evidence 收据,其中包含规范参数、确定性摘要、行数核对、数据源时间窗口,以及精确或语义重放语义。精确收据会固定证据时间窗口。语义收据会说明,重新运行一个会变化的相对时间窗口可能会返回更新的快照。
当响应使用估算、部分、抽样、封顶或分页数据时,顶层答案和元数据会明确说明。_pagination.has_more 仅当存在 next_cursor 时才为 true;_coverage 会说明是否已完整读取请求的时间窗口(window_complete),以及响应是否包含所有匹配行(result_complete)。安全的分页后续操作会包含可执行的工具调用元数据,并明确提供游标参数;无法安全重建的建议会标记为不可执行。
面向图表的工具还会返回图表和表格描述符,供 MCP 客户端或大模型直接渲染,无需逆向分析载荷。
SQD Explorer(测试版)
SQD Explorer 是一款 MCP App,可在支持 MCP Apps 的宿主中呈现工具结果。它目前处于测试版,默认关闭。默认部署只会返回 structuredContent 和精简的 JSON 文本,不会让任何工具结果请求宿主打开界面。你可以通过以下两种方式选择启用:
- 单个连接:在端点后添加
?app=1,例如https://portal.sqd.dev/mcp?app=1。这样可以体验测试版,而不影响其他用户。 - 整个部署:设置
MCP_APP_ENABLED=true。连接仍可双向覆盖此设置,因此?app=0可让单个客户端重新选择退出。
无论是否选择启用,App 资源都会保持注册状态,因此宿主无需任何人选择启用即可直接读取。
启用后,兼容的宿主会收到一张按内容调整大小的内嵌卡片,以及一个全屏工作区,适用于 21 个数据工具:以主要数值为核心的指标、多序列和带符号值图表、带关联成交量和固定读数的价格蜡烛图、显示十行并带有“显示全部”控件的排名和时间线面板、每页显示十行且可搜索所有行的证据表、地址、哈希和区块的浏览器链接、来自 SQD 网络元数据的链徽标和名称、续传控件、当前会话历史记录,以及通过宿主进行的 JSON 或 CSV 导出。通过指针和键盘检查可查看精确的绘制值。缺失的数据桶仍会显示为空档,标识符不会缩短,任何本地行数上限都与服务器端数据完整性无关。后续请求失败时,错误下方仍会保留最近一次成功的结果。此 App 完全自包含,不使用持久化的浏览器存储;它在浏览器端唯一发出的请求是链徽标图片,来源为 cdn.subsquid.io 和 sqd.dev,这两个源已在资源 CSP 中声明。不支持 MCP App 的宿主会收到相同的 structuredContent 和精简 JSON 文本回退结果,因此底层答案始终不依赖 UI。docs/explorer-design.md 记录了此 App 遵循的设计规则。
三个 MCP 提示词提供可复现的起始示例,无需添加工具:
investigate-walletinvestigate-contractinvestigate-market
如需以图表为主的演示,请询问:Show BTC price action and trading volume on Hyperliquid for the past hour, using five-minute candles. Explain whether the final candle is closed.结果会打开 SQD Explorer,显示蜡烛图、成交量、证据表、请求和索引的时间范围,以及回执。需要进行稳定的验证运行时,请将返回的 requested_window_start_timestamp 和 requested_window_end_exclusive 作为固定的 from_timestamp 和 to_timestamp 输入重放。
在 Claude 中试用
托管端点默认关闭 Explorer,因此新用户需要为自己的连接选择启用:
- 在 claude.ai 或 Claude Desktop 中,打开 设置 → 连接器 → 添加自定义连接器,输入
https://portal.sqd.dev/mcp?app=1,并选择无需身份验证。?app=1仅会为此连接启用测试版。在 Claude Desktop 中,你也可以安装最新版本中的sqd.mcpb,并开启“SQD Explorer (beta)”设置。 - 开始新聊天,并为该聊天启用 SQD 连接器。
- 提出数据问题。以下问题都能调用带有 Explorer 的工具:
What has this wallet been doing on Base lately?,并附上地址(钱包摘要)Show me recent activity on Ethereum(近期活动)Chart hourly transaction counts on Base for the last day(时间序列)
结果会呈现为内嵌卡片,而不是一段文本;打开卡片即可进入全屏工作区。只有 21 个数据工具带有 Explorer。诸如 Which networks do you support? 这样的目录问题会调用 portal_list_networks 并以纯文本作答,这是预期行为,并非故障。
安装
npm install
npm run build
运行
stdio:
npm start
HTTP:
npm run start:http
开发者发现
该服务为客户端构建者提供结构化的工具选择指南:
- MCP 资源
sqd://tools返回分组的工具元数据、示例、入门指引和集成说明。 - MCP 资源
sqd://tools/{name}返回单个工具的指南条目,例如sqd://tools/portal_get_time_series。
工具和资源发现仍通过 MCP 协议本身进行。该服务不会维护重复的 HTTP 目录。
Codex 插件
Codex 插件封装位于 plugins/portal,默认使用托管 MCP 端点 https://portal.sqd.dev/mcp。
从此仓库本地的市场安装:
codex plugin marketplace add .
codex plugin add portal@sqd
安装后打开一个新的 Codex 对话线程。首次使用的提示词包括 Hyperliquid BTC 永续合约成交、近期 Base 交易量,以及 Base 上最新的 USDC 转账。
Claude Code 插件
Claude Code 插件使用相同的托管 MCP 端点和相同的公共选择器:
claude plugin marketplace add subsquid-labs/portal-mcp-server
claude plugin install portal@sqd
安装后打开一个新的 Claude Code 会话,以便加载 SQD MCP 工具。
Grok
Grok 聊天可以将 SQD 用作自定义连接器:
- 打开
grok.com/connectors。 - 选择 新建连接器,然后选择 自定义。
- 将
https://portal.sqd.dev/mcp输入为 MCP 服务 URL。 - 将身份验证留空。
Grok Build 可直接读取 Claude Code 插件,因此使用相同的软件包:
grok plugin install --trust subsquid-labs/portal-mcp-server#plugins/portal
ChatGPT
在启用了自定义 MCP 应用的工作区中,打开 设置 → 应用 → 创建,输入 https://portal.sqd.dev/mcp,选择不使用身份验证,扫描工具,然后创建草稿应用。该服务为只读服务,不需要用户凭据。
Claude Desktop
从最新版本下载 sqd.mcpb 并打开:Claude Desktop 只需单击一次即可安装该捆绑包,并列出 31 个工具。该捆绑包包含服务、其生产依赖项,以及一个可选设置“SQD Explorer (beta)”,该设置默认关闭。运行所需机器上的 Node 版本为 22 或更高。
手动备用方案:从本地克隆仓库运行 npm run build 后,将类似下面的条目添加到 claude_desktop_config.json:
{
"mcpServers": {
"SQD": {
"command": "node",
"args": ["/absolute/path/to/sqd-portal-mcp-server/dist/index.js"]
}
}
}
使用说明
- 如果不知道确切的网络名称,请从
portal_list_networks开始。 - 如果需要近期索引状态,请先使用
portal_get_network_info或portal_get_head。 - 如果问题范围较广,请先使用
portal_get_recent_activity、portal_get_wallet_summary或portal_get_time_series,再使用原始查询。 - 时间范围接受简写和自然语言,例如
30m、past 30 minutes、in the past 1h、in last 38 mins、last hour或30 minutes ago。 - 仅在确实需要蜡烛图形状的输出时,才使用
portal_evm_get_ohlc和portal_hyperliquid_get_ohlc。 - 对于大型查询或探索性查询,除非需要完整记录结构,否则优先使用
response_format: "compact"。
HTTP 部署说明
HTTP 模式在 / 和 /mcp 提供 MCP,在 /health 提供存活状态检查,在 /ready 提供就绪状态检查。托管服务在 https://portal.sqd.dev/mcp/health 提供相同的版本化健康状态响应。
- MCP 和健康检查端点无需身份验证。
- 工具和资源发现使用 MCP 协议;已停用的
/tools和/tools.json路由会返回404。 - 运行多个进程的部署必须设置
MCP_CURSOR_SECRET,这样一个实例签发的游标才能被下一个实例接受。若不设置,每个进程都会使用各自的随机密钥签名,游标在重启或负载均衡切换后将失效。 /health会报告镜像构建所用的 git 提交对应的version和commit,每个工具结果也会在_server中重复包含这两项。Docker Hub 标签:latest、X.Y.Z和X.Y仅来自v*发布标签;edge和sha-<commit>来自每次main推送。生产环境请固定使用版本标签。- 只有在数据集目录至少加载过一次,且最近一次 Portal 探测成功时间距今未超过
MCP_READY_MAX_AGE_MS时,/ready才返回200;否则返回503,并附带reason和Retry-After。编排器的就绪检查应指向/ready,存活检查应指向/health。Docker 镜像的HEALTHCHECK使用/ready。 - 除非另行设置
MCP_BIND,服务器会绑定到127.0.0.1;每个路由都会根据允许列表检查Host标头,以及浏览器发送的Origin,因此经 DNS 重绑定的页面无法访问本地实例。环回主机和来源始终通过检查;没有Origin的请求始终通过来源检查。绑定到非环回地址时,必须设置MCP_ALLOWED_HOSTS和MCP_ALLOWED_ORIGINS;如果缺少其中任一项,服务器会记录启动错误,并在不进行该项检查的情况下提供服务。Docker 镜像会设置MCP_BIND=0.0.0.0,因此请在部署中设置这两个变量;如果前置代理已验证这些值,也可以设置为*。 - 每个请求都有时限:标头必须在
MCP_HEADERS_TIMEOUT_MS内接收完毕,整个请求必须在MCP_REQUEST_TIMEOUT_MS内完成,空闲的 keep-alive 连接时限为MCP_KEEP_ALIVE_TIMEOUT_MS。超过MCP_MAX_BODY_BYTES的 MCP 请求体会在解析前被拒绝并返回413;没有长度的分块请求体会返回411。
常用环境变量:
MCP_CURSOR_SECRET用于签名分页游标的密钥。在运行多个进程的任何部署中都必须设置。 未设置时,每个进程都会使用自己的随机密钥签名,因此某个实例发出的游标会被下一个实例拒绝,客户端在重启或负载均衡切换后会丢失进度。它还可以防止调用方伪造工具从未提供过的窗口对应的游标。MCP_TOOLSETS要提供的工具集,以逗号分隔(discovery、convenience、evm、solana、bitcoin、substrate、hyperliquid、tron、debug;all或default表示全部)。未知名称会被忽略,并在启动时报告错误。优先级高于MCP_TOOLS。默认值:全部九个工具集,共 31 个工具的完整目录。MCP_TOOLS当未设置MCP_TOOLSETS时,要提供的精确工具名称,以逗号分隔。- 对于每个连接,在端点 URL 中添加
?toolsets=evm,或添加X-MCP-Toolsets: evm标头,只会缩小该连接可用的部署工具集范围,绝不会添加工具集。引用了当前启用范围之外工具的提示词不会提供。mcp_tool_client_calls_total上的启用范围是有界标签(all、单个工具集名称或custom)。 MCP_BIND要监听的接口,默认值为127.0.0.1(Docker 镜像中为0.0.0.0)MCP_ALLOWED_HOSTS在回环地址之外,允许出现在Host中的主机名,以逗号分隔(忽略端口);*表示禁用检查。绑定非回环地址时必须设置。MCP_ALLOWED_ORIGINS在回环地址之外,允许出现在Origin中的主机名,以逗号分隔;*表示禁用检查。绑定非回环地址时必须设置。MCP_REQUEST_TIMEOUT_MS、MCP_HEADERS_TIMEOUT_MS、MCP_KEEP_ALIVE_TIMEOUT_MS请求计时限值,默认值分别为120000、30000、65000MCP_MAX_BODY_BYTESMCP 请求正文大小上限,默认值为1048576MCP_READY_PROBE_INTERVAL_MS和MCP_READY_MAX_AGE_MS就绪探测频率和新鲜度,默认值分别为30000和90000MCP_APP_ENABLED是否向兼容的主机提供 Beta 版 SQD Explorer,默认关闭。接受true或1。每个连接可通过?app=1和?app=0覆盖此设置。MCP_TOOL_WEIGHT_BUDGET用于限制活跃工具调用的总成本,默认值为32。根据测得的配置文件,在队列中仍有待处理工作时,最多可同时进行 32 次查询、4 次原始或摘要调用,或 2 次分析调用;已排队的工作仍可感知取消操作。MCP_TOOL_MAX_QUEUE用于限制排队的工具调用数,默认值为64MCP_TOOL_QUEUE_TIMEOUT_MS用于限制工具准入等待时间,默认值为5000MCP_TOOL_CLIENT_WEIGHT_SHARE单个调用方(一个连接,通过哈希地址标识)一次最多可占用的权重预算百分比,默认值为50;不会低于单个最重工具所需的权重,确保每个工具都能获得调度。MCP_TOOL_CLIENT_MAX_QUEUE限制单个调用方的排队调用数,默认值为16。超过份额的调用方会收到可重试的overloaded结果,其中reason: client_share;其他调用方的请求则不受影响。MCP_TRUST_PROXY设置为1(或服务器前方代理的数量),根据代理观测到的地址而非套接字地址进行公平性管理。只有当直接对端本身是受信任代理时,才会读取该标头;跳数从X-Forwarded-For的右侧开始计数,因为调用方可以随意填写左侧的内容。地址会经过哈希处理,且绝不存储或作为标签。MCP_TRUSTED_PROXY_PREFIXES以逗号分隔的地址前缀列表,用于指定受信任的代理;通过匹配对端地址的开头进行判断(例如203.0.113.或2606:4700:)。设置此项会替换默认值,而不是在默认值上追加,因此如果同机代理也能访问服务器,请将回环地址或你的私有地址范围包含在内。未设置时,回环地址和私有地址范围会被信任;同机代理通常位于这些范围内。在共享私有网络中,这意味着该网络上的任何主机都能提供转发地址,因此应在此类网络中明确指定代理。MCP_SLOW_REQUEST_MS用于判定慢速请求的阈值;每次工具调用超过此阈值时,会向 stderr 输出一行 JSON,其中包含准入等待时间、执行耗时和有界的客户端类别。默认值为5000。
成本护栏
服务中编译了每种工具各自的扫描上限:筛选后的跟踪扫描最多处理 5,000 个区块,合约部署搜索最多处理 1,000,000 个区块。护栏会在这些上限之上再增加一层上限,由部署通过环境变量设置,因此端点负载过高时,无需构建新镜像即可调低上限。
MCP_GUARDRAIL_MODE可设为off(默认值)、shadow或enforce。MCP_GUARDRAIL_<CLASS>_<LIMIT>用于设置一项上限,其中<CLASS>为LOOKUP、RAW_QUERY、SUMMARY或ANALYTICS,<LIMIT>为MAX_SCAN_BLOCKS、MAX_WINDOW_SECONDS或MAX_UPSTREAM_BYTES。例如:MCP_GUARDRAIL_RAW_QUERY_MAX_SCAN_BLOCKS=50000。
没有任何数值默认值。 某个类别如果没有设置任何值,就不会增加额外上限,因此未配置任何值时,off 和 enforce 下的服务完全相同。只有设置数值,护栏才会改变行为。
shadow 会评估每项上限,并记录启用强制执行时会采取的操作,但不会更改任何响应。enforce 会实际执行:
- 扫描超过上限时,会在上限处停止,并通过扫描达到编译上限时已有的相同部分覆盖处理路径,报告已覆盖的范围。因此,
_coverage.result_complete会变为false,响应也会列出搜索过的区块。它绝不会声称得到了实际上并未获取的完整答案。 - 查询时间窗口超过上限时,会在获取任何数据之前拒绝请求,并在错误中指出上限及后续步骤,因为对于尚未获准启动的请求,无法返回部分结果。
四个计数器,标签均有界:mcp_guardrail_admitted_total{class}、
mcp_guardrail_would_block_total{class,limit}、
mcp_guardrail_blocked_total{class,limit} 和
mcp_guardrail_fail_open_total{reason}。
建议的推出方式。 设置你正在考虑的上限,并运行 shadow 一周。查看 mcp_guardrail_would_block_total:其中记录的正是上限会拦截的实际请求。如果这类请求的数量超出预期,说明上限设错了,而不是流量有问题。达到预期规模后,再切换到 enforce。
追踪
指标说明发生的频率和持续时间;追踪则说明一次调用中时间花在了哪里。除非设置了 OTEL_EXPORTER_OTLP_ENDPOINT,否则追踪处于关闭状态。未设置该变量时,这里不会导入、分配或发送任何内容,也完全不需要安装 OpenTelemetry 软件包。
此软件包不依赖 SDK。SDK 及其导出器会额外引入约 74 个软件包,而已发布的 tarball 大约有 3.4MB;几乎没有通过 stdio 运行此服务的人会需要这些内容,因此它们被声明为可选对等依赖。若要启用追踪,请将它们与服务一同安装,并将服务指向你的收集器:
npm i @opentelemetry/sdk-node @opentelemetry/exporter-trace-otlp-http
OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4318
一次工具调用对应一棵追踪树:
mcp.request (HTTP only: method, transport)
└─ tools/call portal_evm_query_logs
├─ mcp.admission (the wait for a slot)
├─ portal.fetch (one per attempt: dataset, status, bytes, resend count)
├─ portal.fetch
└─ mcp.format_result (hashing the answer for the evidence receipt)
OpenTelemetry SDK 本身会读取 OTEL_* 变量,因此采样、标头、批处理和协议都按标准方式配置。其他说明:
- HTTP 请求中的
traceparent,或工具调用_meta中的traceparent,会让此次调用加入调用方的追踪,而不是启动新的追踪。_meta中的值优先,因为它对本次调用属于哪一轮有更具体的说明。 - 每个 Portal 请求都会携带一个
traceparent,用于标识其自身的 fetch span,因此 Portal 侧的追踪可以加入此次追踪。关闭追踪时不会添加任何内容。 - 启用追踪时,JSON 日志行会携带
trace_id和span_id,因此可以通过日志事件和 span 相互查找。 /health会报告是否已配置追踪、是否已启动追踪,以及是否启用了参数采集。
Span 属性不包含任何参数、地址、哈希值、游标或自由文本。它们仅包含工具名称、工作类别、数据集、有限范围内的计数和有限范围内的结果。Span 会离开进程并发送到收集器,而查询本身绝不会到达那里,因此这里遵循与指标标签相同的规则,并且比日志更严格;至少日志只会留在你自己的 stderr 中。MCP_OTEL_INCLUDE_ARGS=1 会将原始工具参数添加到工具 span 中。默认关闭,且不适合用于生产环境:工具参数通常是钱包地址,也常常包含用户自己的原话。
测试
npm run test:offline 会构建、检查代码风格、进行类型检查、运行单元测试,并运行所有不需要访问 Portal 的测试套件。npm run test:live 会运行依赖 Portal 的测试套件。RELEASE_ASSURANCE.md 概述了发布验证的内容,scripts/README.md 列出了所有测试套件。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。