Contribution Exchange MCP: domain discovery, policies, preflight, proposals, and signals.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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).
Domain name or HTTPS URL to check (e.g. 'signalaf.com' or 'https://signalaf.com'). Normalized to hostname.
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).
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain name or HTTPS URL to check (e.g. 'signalaf.com' or 'https://signalaf.com'). Normalized to hostname. |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"maxLength": 253,
"minLength": 3,
"description": "Domain name or HTTPS URL to check (e.g. 'signalaf.com' or 'https://signalaf.com'). Normalized to hostname."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| signal_id* | string | Signal ID. |
| attempt_id* | string | Attempt ID. |
{
"type": "object",
"required": [
"signal_id",
"attempt_id"
],
"properties": {
"signal_id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Signal ID."
},
"attempt_id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Attempt ID."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Domain name to fetch policy for. |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"maxLength": 253,
"minLength": 3,
"description": "Domain name to fetch policy for."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| signal_id* | string | Signal ID. |
{
"type": "object",
"required": [
"signal_id"
],
"properties": {
"signal_id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Signal ID."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| type | string | Filter by signal type. |
| label | string | Filter by label. |
| limit | integer | Maximum signals to return (1-100, default 50). |
| cursor | string | Pagination cursor from a previous response. |
| domain | string | Filter by publisher domain. |
| status | string | Filter by signal status. |
| expires_before | string | ISO 8601 timestamp — only signals expiring before this. |
| published_after | string | ISO 8601 timestamp — only signals published after this. |
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.
| Argument | Type | Description |
|---|---|---|
| domain* | string | Target domain for the proposed contribution. |
| category* | string | Contribution category (e.g. 'technical', 'accessibility', 'documentation', 'research'). |
| confidence | object | Confidence in the observation (score 0-1 and basis). |
| consideration | array | Requested consideration (cash, royalty, reciprocal_access, attribution, referral, other). Advertised consideration is NOT binding until accepted through Commitment. |
| required_authorization | object | Authority requested (inspect_public, sandbox_test, repository_write, private_data, credential_access, production_modify, deploy, penetration_testing). |
| verification_mode |
| string |
| Filter by verification mode. |
| accepting_attempts | boolean | Only return signals currently accepting attempts. |
| consideration_mode | string | Filter by consideration mode. |
{
"type": "object",
"properties": {
"type": {
"enum": [
"problem",
"request",
"challenge",
"bounty",
"verification",
"discovery",
"experiment"
],
"type": "string",
"description": "Filter by signal type."
},
"label": {
"type": "string",
"description": "Filter by label."
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Maximum signals to return (1-100, default 50)."
},
"cursor": {
"type": "string",
"description": "Pagination cursor from a previous response."
},
"domain": {
"type": "string",
"description": "Filter by publisher domain."
},
"status": {
"enum": [
"published",
"paused",
"closed",
"expired",
"withdrawn"
],
"type": "string",
"description": "Filter by signal status."
},
"expires_before": {
"type": "string",
"description": "ISO 8601 timestamp — only signals expiring before this."
},
"published_after": {
"type": "string",
"description": "ISO 8601 timestamp — only signals published after this."
},
"verification_mode": {
"enum": [
"deterministic",
"hybrid",
"manual"
],
"type": "string",
"description": "Filter by verification mode."
},
"accepting_attempts": {
"type": "boolean",
"description": "Only return signals currently accepting attempts."
},
"consideration_mode": {
"enum": [
"fixed",
"maximum",
"negotiable"
],
"type": "string",
"description": "Filter by consideration mode."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"domain",
"category"
],
"properties": {
"domain": {
"type": "string",
"maxLength": 253,
"minLength": 3,
"description": "Target domain for the proposed contribution."
},
"category": {
"type": "string",
"description": "Contribution category (e.g. 'technical', 'accessibility', 'documentation', 'research')."
},
"confidence": {
"type": "object",
"properties": {
"basis": {
"type": "string"
},
"score": {
"type": "number",
"maximum": 1,
"minimum": 0
}
},
"description": "Confidence in the observation (score 0-1 and basis)."
},
"consideration": {
"type": "array",
"items": {
"type": "object"
},
"description": "Requested consideration (cash, royalty, reciprocal_access, attribution, referral, other). Advertised consideration is NOT binding until accepted through Commitment."
},
"required_authorization": {
"type": "object",
"properties": {
"other": {
"type": "array",
"items": {
"type": "string"
}
},
"deploy": {
"type": "boolean"
},
"private_data": {
"type": "boolean"
},
"sandbox_test": {
"type": "boolean"
},
"inspect_public": {
"type": "boolean"
},
"repository_read": {
"type": "boolean"
},
"repository_write": {
"type": "boolean"
},
"credential_access": {
"type": "boolean"
},
"production_modify": {
"type": "boolean"
},
"penetration_testing": {
"type": "boolean"
}
},
"description": "Authority requested (inspect_public, sandbox_test, repository_write, private_data, credential_access, production_modify, deploy, penetration_testing)."
}
},
"additionalProperties": false
}