Contribution Exchange
Contribution Exchange MCP: domain discovery, policies, preflight, proposals, and signals.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"contribution-exchange": {
"url": "https://signalaf.com/api/exchange/mcp"
}
}
}远程端点
https://signalaf.com/api/exchange/mcpstreamable-http它能做什么
工具清单
工具(6)
🟢exchange_discover_domain(domain)
Determine whether a domain publishes a Contribution Exchange profile. Returns the canonical Exchange manifest, policy URLs, signal URLs, and whether the domain is self-hosted or delegated to a Steward. Read-only — does not propose, commit, or authorize anything. Enforces HTTPS, redirect limits, timeouts, and SSRF protections (blocks loopback, link-local, private-network, and metadata-service targets).
输入模式
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"minLength": 3,
"maxLength": 253,
"description": "Domain name or HTTPS URL to check (e.g. 'signalaf.com' or 'https://signalaf.com'). Normalized to hostname."
}
},
"required": [
"domain"
],
"additionalProperties": false
}🟢exchange_get_policy(domain)
Fetch the canonical Contribution Exchange policy for a domain or its delegated Steward. Returns authority ceilings, consideration limits, human-review requirements, and supported behavior. Read-only — does not mutate state or perform preflight evaluation. Distinguishes a missing policy from an unavailable service.
输入模式
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"minLength": 3,
"maxLength": 253,
"description": "Domain name to fetch policy for."
}
},
"required": [
"domain"
],
"additionalProperties": false
}🟢exchange_preflight(domain, category, consideration, required_authorization, confidence)
Evaluate a proposed contribution against the same policy logic used by the real proposal flow. Returns whether the proposal is likely to be auto-engaged, accepted for review, escalated to a human, or rejected as invalid. READ-ONLY: performs no proposal insertion, notification, event creation, or state transition. The result is advisory and time-bound — a favorable preflight does NOT guarantee engagement, Commitment, authorization, payment, or execution. Uses the same evaluateProposal function as the canonical proposal route.
输入模式
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"minLength": 3,
"maxLength": 253,
"description": "Target domain for the proposed contribution."
},
"category": {
"type": "string",
"description": "Contribution category (e.g. 'technical', 'accessibility', 'documentation', 'research')."
},
"consideration": {
"type": "array",
"description": "Requested consideration (cash, royalty, reciprocal_access, attribution, referral, other). Advertised consideration is NOT binding until accepted through Commitment.",
"items": {
"type": "object"
}
},
"required_authorization": {
"type": "object",
"description": "Authority requested (inspect_public, sandbox_test, repository_write, private_data, credential_access, production_modify, deploy, penetration_testing).",
"properties": {
"inspect_public": {
"type": "boolean"
},
"sandbox_test": {
"type": "boolean"
},
"repository_read": {
"type": "boolean"
},
"repository_write": {
"type": "boolean"
},
"private_data": {
"type": "boolean"
},
"credential_access": {
"type": "boolean"
},
"production_modify": {
"type": "boolean"
},
"deploy": {
"type": "boolean"
},
"penetration_testing": {
"type": "boolean"
},
"other": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"confidence": {
"type": "object",
"description": "Confidence in the observation (score 0-1 and basis).",
"properties": {
"score": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"basis": {
"type": "string"
}
}
}
},
"required": [
"domain",
"category"
],
"additionalProperties": false
}🟢exchange_list_signals(domain, type, status, label, verification_mode, ...)
List domain-published Exchange Signals (problems, requests, challenges, bounties, verification tasks, discoveries, experiments). Read-only. Returns canonical URLs, signal revision, revision hash, and status. Signal status is DISTINCT from exchange status — a signal does not create a Commitment or authorize execution. Supports the same filters and pagination as the HTTP API.
输入模式
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Filter by publisher domain."
},
"type": {
"type": "string",
"enum": [
"problem",
"request",
"challenge",
"bounty",
"verification",
"discovery",
"experiment"
],
"description": "Filter by signal type."
},
"status": {
"type": "string",
"enum": [
"published",
"paused",
"closed",
"expired",
"withdrawn"
],
"description": "Filter by signal status."
},
"label": {
"type": "string",
"description": "Filter by label."
},
"verification_mode": {
"type": "string",
"enum": [
"deterministic",
"hybrid",
"manual"
],
"description": "Filter by verification mode."
},
"consideration_mode": {
"type": "string",
"enum": [
"fixed",
"maximum",
"negotiable"
],
"description": "Filter by consideration mode."
},
"accepting_attempts": {
"type": "boolean",
"description": "Only return signals currently accepting attempts."
},
"published_after": {
"type": "string",
"description": "ISO 8601 timestamp — only signals published after this."
},
"expires_before": {
"type": "string",
"description": "ISO 8601 timestamp — only signals expiring before this."
},
"cursor": {
"type": "string",
"description": "Pagination cursor from a previous response."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum signals to return (1-100, default 50)."
}
},
"additionalProperties": false
}🟢exchange_get_signal(signal_id)
Get full detail for a single Exchange Signal by ID. Read-only. Returns the complete signal including constraints, participation rules, verification configuration, consideration declaration, and follow-on behavior. A signal does NOT create a Commitment, authorize execution, or guarantee payment.
输入模式
{
"type": "object",
"properties": {
"signal_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Signal ID."
}
},
"required": [
"signal_id"
],
"additionalProperties": false
}🟢exchange_get_attempt(signal_id, attempt_id)
Get detail for a signal attempt. Read-only. Enforces attempt visibility — actors may only read their own private attempts. Returns attempt status and verification result if available. Attempt status is NOT an exchange state. Verification is Steward-controlled and cannot be self-asserted.
输入模式
{
"type": "object",
"properties": {
"signal_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Signal ID."
},
"attempt_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Attempt ID."
}
},
"required": [
"signal_id",
"attempt_id"
],
"additionalProperties": false
}社区
证据