io.github.Fabric-Protocol/fabric
Fabric Marketplace
Agent-native marketplace. Bootstrap, list inventory, search, negotiate, and trade via MCP.
Status
Healthy
Score
74.3
Transport
streamable-http
Tools
28
Production readiness
Verdict
Needs remediation
Current validation evidence shows operational or discovery gaps that should be fixed first.
Critical alerts
0
Production verdicts degrade quickly when critical alerts are active.
Evidence confidence
Confidence score
65.0
Based on 20 recent validations, 26 captured checks, and validation age of 606.8 hours.
Live checks captured
26
More direct checks increase trust in the current verdict.
Validation age
606.8h
Lower age means fresher evidence.
Recommended for
Claude Desktop
Claude Desktop is marked compatible with score 83.
Smithery
Smithery is marked compatible with score 80.
Generic Streamable HTTP
Generic Streamable HTTP is marked compatible with score 100.
Client readiness verdicts
Ready for ChatGPT custom connector
Partial
OpenAI connectors expect OAuth for remote server auth.; Dynamic client registration materially improves connector setup.; Transport compliance should be in good shape.
Confidence: medium (65.0)
Evidence provenance
Winner: live_validation
Supporting sources: live_validation, history, server_card
Disagreements: none
initialize• OKtools_list• OKtransport_compliance_probe• Errorstep_up_auth_probe• Missingconnector_replay_probe• OK — Frozen tool snapshots must survive refresh.request_association_probe• Missing — Roots, sampling, and elicitation should stay request-scoped.
Ready for Claude remote MCP
Ready
Transport behavior should match Claude-compatible HTTP expectations.
Confidence: medium (65.0)
Evidence provenance
Winner: live_validation
Supporting sources: live_validation, history, server_card
Disagreements: none
initialize• OKtools_list• OKtransport_compliance_probe• Error
Unsafe for write actions
Yes
High-risk write, exec, or destructive tools need stronger auth and confirmation semantics.
Confidence: medium (65.0)
Evidence provenance
Winner: live_validation
Supporting sources: live_validation, history
Disagreements: none
action_safety_probe• Error
Snapshot churn risk
Low
No material tool-surface churn detected in the latest comparison.
Confidence: medium (65.0)
Evidence provenance
Winner: history
Supporting sources: history, live_validation
Disagreements: none
tool_snapshot_probe• OKconnector_replay_probe• OK
Why not ready by client
ChatGPT custom connector
Partial
Remediation checklist
- No explicit blockers recorded.
Claude remote MCP
Ready
Remediation checklist
- No explicit blockers recorded.
Write-safe publishing
Blocked
Remediation checklist
- No explicit blockers recorded.
Verdict traces
Production verdict
Needs remediation
Current validation evidence shows operational or discovery gaps that should be fixed first.
Confidence: medium (65.0)
Winning source: live_validation
Triggering alerts
validation_stale• medium • Validation evidence is stale
Client verdict trace table
| Verdict | Status | Checks | Winning source | Conflicts |
|---|---|---|---|---|
openai_connectors |
Partial | initialize, tools_list, transport_compliance_probe, step_up_auth_probe, connector_replay_probe, request_association_probe | live_validation | none |
claude_desktop |
Ready | initialize, tools_list, transport_compliance_probe | live_validation | none |
unsafe_for_write_actions |
Yes | action_safety_probe | live_validation | none |
snapshot_churn_risk |
Low | tool_snapshot_probe, connector_replay_probe | history | none |
Publishability policy profiles
ChatGPT custom connector publishability
Caution
OpenAI connectors expect OAuth for remote server auth.; Dynamic client registration materially improves connector setup.; Transport compliance should be in good shape.
- Search Fetch Only: No
- Write Actions Present: Yes
- Oauth Configured: No
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
Claude remote MCP publishability
Ready
Transport behavior should match Claude-compatible HTTP expectations.
- Search Fetch Only: No
- Write Actions Present: Yes
- Oauth Configured: No
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
Compatibility fixtures
ChatGPT custom connector fixture
Degraded
OpenAI connectors expect OAuth for remote server auth.; Dynamic client registration materially improves connector setup.; Transport compliance should be in good shape.
- remote_http_endpoint: Passes
- oauth_discovery: Degraded
- frozen_tool_snapshot_refresh: Passes
- request_association: Passes
Anthropic remote MCP fixture
Degraded
Transport behavior should match Claude-compatible HTTP expectations.
- remote_transport: Passes
- tool_discovery: Passes
- auth_connect: Passes
- safe_write_review: Degraded
Authenticated validation sessions
Latest profile
remote_mcp
Authenticated session used
Public score isolation
Preview endpoint
/v1/verifyCI preview endpoint
/v1/ci/previewPublic server reputation
Validation success 7d
n/a
Validation success 30d
1.0
Mean time to recover
n/a
Breaking diffs 30d
1
Registry drift frequency 30d
0
Snapshot changes 30d
1
Incident & change feed
| Timestamp | Event | Details |
|---|---|---|
| Apr 09, 2026 12:55:33 AM UTC | Latest validation: healthy | Score 74.3 with status healthy. |
Capabilities
- OAuth:
- DCR/CIMD:
- Prompts:
- Homepage: none
- Docs: none
- Support: none
- Icon: none
- Remote endpoint: https://fabric-api-393345198409.us-west1.run.app/mcp
- Server card: none
Use-case taxonomy
development search communication productivity
Security posture
Tools analyzed
28
High-risk tools
13
Destructive tools
4
Exec tools
3
Egress tools
3
Secret tools
22
Bulk-access tools
8
Risk distribution
low:2, medium:13, high:12, critical:1
Tool capability & risk inventory
| Tool | Capabilities | Risk | Findings | Notes |
|---|---|---|---|---|
fabric_bootstrap |
read write network filesystem | Medium | filesystem mutation | No explicit safeguard hints detected. |
fabric_get_meta |
read network | Medium | none | No explicit safeguard hints detected. |
fabric_get_categories |
read network | Medium | none | No explicit safeguard hints detected. |
fabric_get_regions |
read | Low | none | No explicit safeguard hints detected. |
fabric_recovery_start |
write | Medium | none | No explicit safeguard hints detected. |
fabric_recovery_complete |
other | Low | none | No explicit safeguard hints detected. |
fabric_login_session |
write exec secrets | High | command execution secret material access freeform input surface | No explicit safeguard hints detected. |
fabric_logout_session |
read write delete secrets | High | destructive operation secret material access | No explicit safeguard hints detected. |
fabric_search |
read write exec network secrets export | Critical | command execution arbitrary network egress bulk data access secret material access | Safeguards hinted in metadata. |
fabric_create_inventory |
read write network admin secrets export | High | bulk data access secret material access admin mutation | No explicit safeguard hints detected. |
fabric_set_inventory_visibility |
read write network secrets | Medium | secret material access | No explicit safeguard hints detected. |
fabric_list_inventory |
read write delete network secrets export | High | destructive operation bulk data access secret material access | Safeguards hinted in metadata. |
fabric_update_inventory |
read write network admin secrets export | High | bulk data access secret material access admin mutation | No explicit safeguard hints detected. |
fabric_delete_inventory |
read write delete network admin secrets | High | destructive operation secret material access admin mutation | No explicit safeguard hints detected. |
fabric_get_inventory |
read write network secrets | Medium | secret material access | No explicit safeguard hints detected. |
fabric_get_node_inventory |
read write network secrets export | Medium | bulk data access secret material access | Safeguards hinted in metadata. |
fabric_get_nodes_categories_summary |
read write secrets | Medium | secret material access | No explicit safeguard hints detected. |
fabric_auth_keys |
read write delete secrets | High | destructive operation secret material access | No explicit safeguard hints detected. |
fabric_get_offers |
read write network admin secrets export | High | bulk data access secret material access admin mutation | Safeguards hinted in metadata. |
fabric_get_events |
read write exec network secrets export | High | command execution bulk data access secret material access | Safeguards hinted in metadata. |
fabric_write_offer |
read write network secrets | Medium | secret material access | No explicit safeguard hints detected. |
fabric_decide_offer |
write secrets | Medium | secret material access | No explicit safeguard hints detected. |
fabric_reveal_contact |
write secrets | Medium | secret material access | No explicit safeguard hints detected. |
fabric_report_offer |
read write network secrets | Medium | secret material access | No explicit safeguard hints detected. |
fabric_get_billing_info |
read write admin secrets export | High | bulk data access secret material access admin mutation | Safeguards hinted in metadata. |
fabric_start_purchase |
write network secrets | High | arbitrary network egress secret material access | No explicit safeguard hints detected. |
fabric_profile |
read write network filesystem secrets | High | arbitrary network egress secret material access filesystem mutation | No explicit safeguard hints detected. |
fabric_referrals |
read write secrets | Medium | secret material access freeform input surface | No explicit safeguard hints detected. |
Write-action governance
Governance status
Error
Safe to publish
Auth boundary
public_or_unclear
Blast radius
High
High-risk tools
13
Confirmation signals
fabric_logout_session
Safeguard count
6
Status detail: 13 high-risk tool(s), 4 destructive tool(s), 3 exec-capable tool(s) are exposed without a clear auth boundary; 6 safeguard(s) and 1 confirmation signal(s) detected.
| Tool | Risk | Flags | Safeguards |
|---|---|---|---|
fabric_login_session |
High | command execution secret material access freeform input surface | no |
fabric_logout_session |
High | destructive operation secret material access | no |
fabric_search |
Critical | command execution arbitrary network egress bulk data access secret material access | yes |
fabric_create_inventory |
High | bulk data access secret material access admin mutation | no |
fabric_list_inventory |
High | destructive operation bulk data access secret material access | yes |
fabric_update_inventory |
High | bulk data access secret material access admin mutation | no |
fabric_delete_inventory |
High | destructive operation secret material access admin mutation | no |
fabric_auth_keys |
High | destructive operation secret material access | no |
fabric_get_offers |
High | bulk data access secret material access admin mutation | yes |
fabric_get_events |
High | command execution bulk data access secret material access | yes |
fabric_get_billing_info |
High | bulk data access secret material access admin mutation | yes |
fabric_start_purchase |
High | arbitrary network egress secret material access | no |
fabric_profile |
High | arbitrary network egress secret material access filesystem mutation | no |
Action-controls diff
Snapshot changed
no
Disabled-by-default candidates
none
Manual review candidates
none
New actions
| Action | Risk | Flags |
|---|---|---|
| No newly added actions. | ||
Changed actions
| Action | Change types | Risk |
|---|---|---|
| No materially changed actions. | ||
Why this score?
Access & Protocol
32/44
Connectivity, auth, and transport expectations for common clients.
Interface Quality
36.7/56
How well the tool/resource interface communicates and behaves under automation.
Security Posture
26.5/36
How safely the exposed tool surface handles destructive actions, egress, execution, secrets, and risky inputs.
Reliability & Trust
22/24
Operational stability, consistency, and trustworthiness over time.
Discovery & Governance
23.5/28
How well the server is documented, listed, and governed in public registries.
Adoption & Market
5/8
Adoption clues and public evidence that the server is intended for external use.
Algorithmic score breakdown
Auth Operability
2/4
Measures whether auth discovery and protected access behave predictably for clients.
Error Contract Quality
0.4/4
Grades machine-readable error structure, status alignment, and remediation hints.
Rate-Limit Semantics
2/4
Checks whether quota/throttle responses are deterministic and automation-friendly.
Schema Completeness
3/4
Completeness of tool descriptions, parameter docs, examples, and schema shape.
Backward Compatibility
4/4
Stability score across tool schema/name drift relative to prior validations.
SLO Health
3/4
Availability, latency, and burst-failure profile across recent validation history.
Security Hygiene
2/4
HTTPS posture, endpoint hygiene, and response-surface hardening checks.
Task Success
4/4
Can an agent reliably initialize, enumerate tools, and execute core MCP flows?
Trust Confidence
4/4
Confidence-adjusted reliability score that penalizes low evidence volume.
Abuse/Noise Resilience
3/4
How well the server preserves core behavior in the presence of noisy traffic patterns.
Prompt Contract
2/4
Quality of prompt metadata, argument shape, and prompt discoverability for clients.
Resource Contract
2/4
How completely resources and resource templates describe URIs, types, and usage shape.
Discovery Metadata
3/4
Homepage, docs, icon, repository, support, and license coverage for directory consumers.
Registry Consistency
2/4
Agreement between stored registry metadata, live server-card data, and current validation output.
Installability
4/4
How cleanly a real client can connect, initialize, enumerate tools, and proceed through auth.
Session Semantics
4/4
Determinism and state behavior across repeated MCP calls, including sticky-session surprises.
Tool Surface Design
3/4
Naming clarity, schema ergonomics, and parameter complexity across the tool surface.
Result Shape Stability
3/4
Stability of declared output schemas across validations, with penalties for drift or missing shapes.
OAuth Interop
3/4
Depth and client compatibility of OAuth/OIDC metadata beyond the minimal protected-resource check.
Recovery Semantics
0.3/4
Whether failures include actionable machine-readable next steps such as retry or upgrade guidance.
Maintenance Signal
4/4
Versioning, update recency, and historical validation cadence that indicate active stewardship.
Adoption Signal
2/4
Directory presence and distribution clues that suggest the server is intended for external use.
Freshness Confidence
4/4
Confidence that recent validations are current enough and dense enough to trust operationally.
Transport Fidelity
4/4
Whether declared transport metadata matches the observed endpoint behavior and response formats.
Spec Recency
4/4
How close the server’s claimed MCP protocol version is to the latest known public revision.
Session Resume
3/4
Whether Streamable HTTP session identifiers and resumed requests behave cleanly for real clients.
Step-Up Auth
3/4
Whether OAuth metadata and WWW-Authenticate challenges support granular, incremental consent instead of broad upfront scopes.
Transport Compliance
0/4
Checks session headers, protocol-version enforcement, session teardown, and expired-session behavior.
Utility Coverage
2/4
Signals support for completions, pagination, and task-oriented utility surfaces that larger clients increasingly expect.
Advanced Capability Coverage
3/4
Coverage of newer MCP surfaces like roots, sampling, elicitation, structured output, and related metadata.
Connector Publishability
3/4
How ready the server looks for client catalogs and managed connector programs.
Tool Snapshot Churn
4/4
Stability of the tool surface across recent validations, including add/remove and output-shape drift.
Connector Replay
4/4
Whether a previously published frozen connector snapshot would remain backward compatible after the latest tool refresh.
Request Association
3/4
Whether roots, sampling, and elicitation appear tied to active client requests instead of arriving unsolicited on idle sessions.
Interactive Flow Safety
4/4
Whether prompts and docs steer users toward safe auth flows instead of pasting secrets directly.
Action Safety
2/4
Risk-weighted view of destructive, exec, egress, and confirmation semantics across the tool surface.
Official Registry Presence
4/4
Whether the server appears directly or indirectly in the official MCP registry.
Provenance Divergence
4/4
How closely official registry metadata, the live server card, and public repo/package signals agree with each other.
Safety Transparency
4/4
Clarity of docs, auth disclosure, support links, and other trust signals visible to integrators.
Tool Capability Clarity
4/4
How clearly the tool surface communicates whether each action reads, writes, deletes, executes, or exports data.
Destructive Operation Safety
3/4
Penalizes delete/revoke/destroy style tools unless auth and safeguards reduce blast radius.
Egress / SSRF Resilience
3/4
Assesses arbitrary URL fetch, crawl, webhook, and remote-request exposure on the tool surface.
Execution / Sandbox Safety
1.5/4
Evaluates shell, code, script, and command-execution exposure and whether that surface appears contained.
Data Exfiltration Resilience
4/4
Assesses export, dump, backup, and bulk-read behavior against the surrounding auth and safeguard signals.
Least Privilege Scope
2/4
Rewards scoped auth metadata and penalizes broad or missing scopes around privileged tools.
Secret Handling Hygiene
4/4
Assesses secret-bearing tools, token leakage risk, and whether the public surface avoids obvious secret exposure.
Supply Chain Signal
2.5/4
Public metadata signal for repository, changelog, license, versioning, and recency that supports supply-chain trust.
Input Sanitization Safety
3/4
Penalizes risky freeform string inputs when schemas do not constrain URLs, code, paths, queries, or templates.
Tool Namespace Clarity
4/4
Measures naming uniqueness and ambiguity across the tool namespace to reduce collision and confusion risk.
Compatibility profiles
OpenAI Connectors
66.7
partial
OpenAI connectors expect OAuth for remote server auth.; Dynamic client registration materially improves connector setup.; Transport compliance should be in good shape.
Connector URL: https://fabric-api-393345198409.us-west1.run.app/mcp # No OAuth metadata detected. # Server: io.github.Fabric-Protocol/fabric
Claude Desktop
83.3
compatible
Transport behavior should match Claude-compatible HTTP expectations.
{
"mcpServers": {
"fabric": {
"command": "npx",
"args": ["mcp-remote", "https://fabric-api-393345198409.us-west1.run.app/mcp"]
}
}
}
Smithery
80.0
compatible
Machine-readable failure semantics should be present.
smithery mcp add "https://fabric-api-393345198409.us-west1.run.app/mcp"
Generic Streamable HTTP
100.0
compatible
No major blockers detected.
curl -sS https://fabric-api-393345198409.us-west1.run.app/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Actionable remediation
| Severity | Remediation | Why it matters | Recommended action |
|---|---|---|---|
| High | Add confirmation and dry-run semantics for risky actions | High-risk write, delete, exec, or egress tools should communicate safeguards clearly. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| High | Align session and protocol behavior with Streamable HTTP expectations | Clients increasingly rely on MCP-Protocol-Version, session teardown, and expired-session semantics. | Align MCP-Protocol-Version, MCP-Session-Id, DELETE teardown, and expired-session handling with the transport spec.Playbook
|
| High | Associate roots, sampling, and elicitation with active client requests | Modern MCP guidance expects roots, sampling, and elicitation traffic to be tied to an active client request instead of arriving unsolicited on idle sessions. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| High | Expose /.well-known/oauth-protected-resource | Without a protected-resource document, OAuth clients cannot discover auth requirements reliably. | Serve /.well-known/oauth-protected-resource and point it at your authorization server metadata.Playbook
|
| High | Publish OAuth authorization-server metadata | Clients need authorization-server metadata to discover issuer, endpoints, and DCR support. | Publish /.well-known/oauth-authorization-server from your issuer and include registration_endpoint when supported.Playbook
|
| High | Publish a complete server card | Missing or incomplete server-card metadata weakens discovery, documentation, and trust signals. | Serve /.well-known/mcp/server-card.json and include tools, prompts/resources, homepage, and support links.Playbook
|
| Medium | Adopt a current MCP protocol revision | Older protocol revisions reduce compatibility with newer clients and registry programs. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Close connector-publishing gaps | Connector catalogs care about protocol recency, session behavior, auth clarity, and tool-surface stability. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Document minimal scopes and return cleaner auth challenges | Modern clients expect granular scopes and step-up auth signals such as WWW-Authenticate scope hints. | Return granular scopes and WWW-Authenticate challenge hints instead of forcing overly broad auth upfront.Playbook
|
| Medium | Publish OpenID configuration | OIDC metadata improves token validation and client compatibility. | Expose /.well-known/openid-configuration with issuer, jwks_uri, and supported grants.Playbook
|
| Medium | Respond to validation evidence is stale | Latest validation is 606.8 hours old. | Trigger a fresh validation run or increase scheduler priority for this server.Playbook
|
| Medium | Support resumable HTTP sessions cleanly | Modern MCP clients increasingly expect resumable session behavior on streamable HTTP transports. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Low | Expose modern utility surfaces like completions, pagination, or tasks | Utility coverage improves interoperability with larger clients and long-lived agent workflows. | Expose completions, pagination, and task metadata where supported so larger clients can plan and resume work safely.Playbook
|
| Low | Harden generic GET handling | Simple probe requests should not surface server instability or noisy failures. | Harden generic GET handlers around the origin of https://fabric-api-393345198409.us-west1.run.app/mcp so incidental traffic does not produce noisy failures.Playbook
|
| Low | Publish newer MCP capability signals | Roots, sampling, elicitation, structured outputs, and related metadata improve client understanding and ranking. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
Point loss breakdown
| Component | Current | Points missing |
|---|---|---|
| Transport Compliance | 0/4 | -4.0 |
| Recovery Semantics | 0.3/4 | -3.7 |
| Error Contract | 0.4/4 | -3.6 |
| Execution Sandbox Safety | 1.5/4 | -2.5 |
| Utility Coverage | 2/4 | -2.0 |
| Security Hygiene | 2/4 | -2.0 |
| Resource Contract | 2/4 | -2.0 |
| Registry Consistency | 2/4 | -2.0 |
| Rate Limit Semantics | 2/4 | -2.0 |
| Prompt Contract | 2/4 | -2.0 |
| Least Privilege Scope | 2/4 | -2.0 |
| Auth Operability | 2/4 | -2.0 |
Validation diff
Score delta
0
Summary changed
no
Tool delta
0
Prompt delta
0
Auth mode changed
no
Write surface expanded
no
Protocol regressed
no
Registry drift changed
no
Regressed checks: none
Improved checks: none
| Component | Previous | Latest | Delta |
|---|---|---|---|
| No component deltas between the latest two runs. | |||
Tool snapshot diff & changelog
Snapshot changed
no
Added tools
none
Removed tools
none
Required-argument changes
| Tool | Added required args | Removed required args |
|---|---|---|
| No required-argument changes detected. | ||
Output-schema drift
| Tool | Previous properties | Latest properties |
|---|---|---|
| No output-schema drift detected. | ||
Connector replay
Status
OK
Backward compatible
Would break after refresh
Added tools
none
Removed tools
none
Additive output changes
none
Required-argument replay breaks
| Tool | Added required args | Removed required args |
|---|---|---|
| No required-argument replay breaks detected. | ||
Output-schema replay breaks
| Tool | Removed properties | Added properties |
|---|---|---|
| No output-schema replay breaks detected. | ||
Transport compliance drilldown
Probe status
Error
Transport
streamable-http
Session header
no
Protocol header
no
Bad protocol response
200
DELETE teardown
n/a
Expired session retry
n/a
Last-Event-ID visible
no
Issues: missing_session_id, missing_protocol_header, bad_protocol_not_rejected
Request association
Status
Missing
Advertised capabilities
none
Observed idle methods
none
Violating methods
none
Probe HTTP status
n/a
Issues
none
Utility coverage
Probe status
Missing
Completions
not detected
Completion probe target: none
Pagination
not detected
No nextCursor evidence.
Tasks
Missing
Advertised: no
Benchmark tasks
| Benchmark task | Status | Evidence |
|---|---|---|
| Discover tools | Passes |
|
| Read-only fetch flow | Degraded |
|
| OAuth-required connect | Degraded |
|
| Safe write flow with confirmation | Likely to fail |
|
Registry & provenance divergence
Probe status
OK
Direct official match
yes
Drift fields
none
| Field | Registry | Live server card |
|---|---|---|
| Title | n/a | n/a |
| Version | n/a | n/a |
| Homepage | n/a | n/a |
Active alerts
- Validation evidence is stale (medium)
Latest validation is 606.8 hours old.
Aliases & registry graph
| Identifier | Source | Canonical | Score |
|---|---|---|---|
io.github.Fabric-Protocol/fabric |
official_registry | yes | 74.34 |
Alias consolidation
Canonical identifier
io.github.Fabric-Protocol/fabric
Duplicate aliases
0
Registry sources
official_registry
Homepages
none
Source disagreements
| Field | What differs | Observed values |
|---|---|---|
| No source disagreements detected. | ||
Install snippets
Openai Connectors
Connector URL: https://fabric-api-393345198409.us-west1.run.app/mcp # No OAuth metadata detected. # Server: io.github.Fabric-Protocol/fabric
Claude Desktop
{
"mcpServers": {
"fabric": {
"command": "npx",
"args": ["mcp-remote", "https://fabric-api-393345198409.us-west1.run.app/mcp"]
}
}
}
Smithery
smithery mcp add "https://fabric-api-393345198409.us-west1.run.app/mcp"
Generic Http
curl -sS https://fabric-api-393345198409.us-west1.run.app/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Agent access & tool surface
Live server tools
fabric_bootstrap fabric_get_meta fabric_get_categories fabric_get_regions fabric_recovery_start fabric_recovery_complete fabric_login_session fabric_logout_session
Observed from the latest live validation against https://fabric-api-393345198409.us-west1.run.app/mcp. This is the target server surface, not Verify's own inspection tools.
Live capability counts
28 tools • 1 prompts • 0 resources
Counts come from the latest
tools/list, prompts/list, and resources/list checks.Inspect with Verify
search_servers recommend_servers get_server_report compare_servers
Use Verify itself to search, recommend, compare, and fetch the full report for
io.github.Fabric-Protocol/fabric.Direct machine links
Claims & monitoring
Server ownership
No verified maintainer claim recorded.
Watch subscriptions
0
Teams: none
Alert routing
Active watches
0
Generic webhooks
0
Slack routes
0
Teams routes
0
Email routes
0
| Watch | Team | Channels | Minimum severity |
|---|---|---|---|
| No active watch destinations. | |||
Maintainer analytics
Validation Run Count
20
Average Latency Ms
2285.33
Healthy Run Ratio Recent
1.0
Registry Presence Count
1
Active Alert Count
1
Watcher Count
0
Verified Claim
False
Taxonomy Tags
development, search, communication, productivity
Score Trend
74.34, 74.34, 74.34, 74.34, 74.34, 73.83, 70.74, 74.34, 74.34, 74.34
Remediation Count
15
High Risk Tool Count
13
Destructive Tool Count
4
Exec Tool Count
3
Maintainer response quality
Score
16.67
Verified claim
Support contact
Changelog present
Incident notes present
Tool changes documented
Annotation history
Annotation count
0
Maintainer annotations
No maintainer annotations have been recorded yet.
Maintainer rebuttals & expected behavior
No maintainer rebuttals or expected-behavior overrides are recorded yet.
Latest validation evidence
Latest summary
Healthy
Validation profile
remote_mcp
Started
Apr 09, 2026 12:55:32 AM UTC
Latency
1687.7 ms
Failures
oauth_authorization_serverno authorization serveroauth_protected_resourceClient error '401 Unauthorized' for url 'https://fabric-api-393345198409.us-west1.run.app/.well-known/oauth-protected-resource' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401openid_configurationno authorization serverprobe_noise_resilienceFetched https://fabric-api-393345198409.us-west1.run.app/robots.txtserver_cardClient error '401 Unauthorized' for url 'https://fabric-api-393345198409.us-west1.run.app/.well-known/mcp/server-card.json' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401transport_compliance_probeIssues: missing session id, missing protocol header, bad protocol not rejected (bad protocol=200).
Checks
| Check | Status | Latency | Evidence |
|---|---|---|---|
action_safety_probe |
Error | n/a | 13 high-risk, 4 destructive, 3 exec-capable tool(s); no clear auth boundary; safeguards=6; confirmation=fabric logout session. |
advanced_capabilities_probe |
Warning | n/a | Only 2 capability signal(s): prompts, resources. |
connector_publishability_probe |
Warning | n/a | Publishability blockers: transport compliance, action safety, server card. |
connector_replay_probe |
OK | n/a | Backward compatible with no breaking tool-surface changes. |
determinism_probe |
OK | 154.3 ms | Check completed |
initialize |
OK | 139.0 ms | Protocol 2024-11-05 |
interactive_flow_probe |
OK | n/a | Check completed |
oauth_authorization_server |
Missing | n/a | no authorization server |
oauth_protected_resource |
Error | 78.7 ms | Client error '401 Unauthorized' for url 'https://fabric-api-393345198409.us-west1.run.app/.well-known/oauth-protected-resource' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401 |
official_registry_probe |
OK | n/a | Check completed |
openid_configuration |
Missing | n/a | no authorization server |
probe_noise_resilience |
Error | 67.4 ms | Fetched https://fabric-api-393345198409.us-west1.run.app/robots.txt |
prompt_get |
OK | 124.4 ms | 1 prompt message(s) returned |
prompts_list |
OK | 124.2 ms | 1 prompt(s) exposed |
protocol_version_probe |
Warning | n/a | Claims 2024-11-05; 3 release(s) behind 2025-11-25. |
provenance_divergence_probe |
OK | n/a | Check completed |
request_association_probe |
Missing | n/a | No request-association capabilities were advertised. |
resource_read |
Missing | n/a | not advertised |
resources_list |
OK | 123.6 ms | 0 resource item(s) exposed |
server_card |
Error | 128.7 ms | Client error '401 Unauthorized' for url 'https://fabric-api-393345198409.us-west1.run.app/.well-known/mcp/server-card.json' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401 |
session_resume_probe |
Warning | n/a | no session id |
step_up_auth_probe |
Missing | n/a | No OAuth or incremental-scope signals detected. |
tool_snapshot_probe |
OK | n/a | Check completed |
tools_list |
OK | 152.9 ms | 28 tool(s) exposed |
transport_compliance_probe |
Error | 154.0 ms | Issues: missing session id, missing protocol header, bad protocol not rejected (bad protocol=200). |
utility_coverage_probe |
Missing | 124.7 ms | No completions evidence; no pagination evidence; tasks missing. |
Raw evidence view
Show raw JSON evidence
{
"checks": {
"action_safety_probe": {
"details": {
"auth_present": false,
"confirmation_signals": [
"fabric_logout_session"
],
"safeguard_count": 6,
"summary": {
"bulk_access_tools": 8,
"capability_distribution": {
"admin": 5,
"delete": 4,
"exec": 3,
"export": 8,
"filesystem": 2,
"network": 17,
"other": 1,
"read": 22,
"secrets": 22,
"write": 24
},
"destructive_tools": 4,
"egress_tools": 3,
"exec_tools": 3,
"high_risk_tools": 13,
"risk_distribution": {
"critical": 1,
"high": 12,
"low": 2,
"medium": 13
},
"secret_tools": 22,
"tool_count": 28
}
},
"latency_ms": null,
"status": "error"
},
"advanced_capabilities_probe": {
"details": {
"capabilities": {
"completions": false,
"elicitation": false,
"prompts": true,
"resource_links": false,
"resources": true,
"roots": false,
"sampling": false,
"structured_outputs": false
},
"enabled": [
"prompts",
"resources"
],
"enabled_count": 2,
"initialize_capability_keys": [
"prompts",
"resources",
"tools"
]
},
"latency_ms": null,
"status": "warning"
},
"connector_publishability_probe": {
"details": {
"blockers": [
"transport_compliance",
"action_safety",
"server_card"
],
"criteria": {
"action_safety": false,
"auth_flow": true,
"connector_replay": true,
"initialize": true,
"protocol_version": true,
"remote_transport": true,
"request_association": true,
"server_card": false,
"session_resume": true,
"step_up_auth": true,
"tool_surface": true,
"tools_list": true,
"transport_compliance": false
},
"high_risk_tools": 13,
"tool_count": 28,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "warning"
},
"connector_replay_probe": {
"details": {
"added_tools": [],
"additive_output_changes": [],
"backward_compatible": true,
"output_breaks": [],
"removed_tools": [],
"required_arg_breaks": [],
"would_break_after_refresh": false
},
"latency_ms": null,
"status": "ok"
},
"determinism_probe": {
"details": {
"attempts": 2,
"baseline_signature": "2ffdcbadd08d7a2c9fefae52cc31e24ea13a6a7876aa6d1f8829ca56774a2c31",
"errors": [],
"matches": 2,
"stable_ratio": 1.0,
"successful": 2
},
"latency_ms": 154.31,
"status": "ok"
},
"initialize": {
"details": {
"headers": {
"content-type": "application/json; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "59",
"x-ratelimit-reset": "1775696192.402257"
},
"http_status": 200,
"payload": {
"id": 1,
"jsonrpc": "2.0",
"result": {
"capabilities": {
"prompts": {},
"resources": {},
"tools": {}
},
"protocolVersion": "2024-11-05",
"serverInfo": {
"displayName": "Fabric Marketplace",
"homepage": "https://github.com/Fabric-Protocol/fabric",
"icon": "https://raw.githubusercontent.com/Fabric-Protocol/fabric/main/icon.png",
"name": "fabric-marketplace",
"version": "0.6.0"
}
}
},
"url": "https://fabric-api-393345198409.us-west1.run.app/mcp"
},
"latency_ms": 139.0,
"status": "ok"
},
"interactive_flow_probe": {
"details": {
"oauth_supported": false,
"prompt_available": true,
"risk_hits": [],
"safe_hits": [
"login",
"browser"
]
},
"latency_ms": null,
"status": "ok"
},
"oauth_authorization_server": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"oauth_protected_resource": {
"details": {
"error": "Client error '401 Unauthorized' for url 'https://fabric-api-393345198409.us-west1.run.app/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401",
"url": "https://fabric-api-393345198409.us-west1.run.app/.well-known/oauth-protected-resource"
},
"latency_ms": 78.71,
"status": "error"
},
"official_registry_probe": {
"details": {
"direct_match": true,
"official_peer_count": 1,
"registry_identifier": "io.github.Fabric-Protocol/fabric",
"registry_source": "official_registry"
},
"latency_ms": null,
"status": "ok"
},
"openid_configuration": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"probe_noise_resilience": {
"details": {
"headers": {
"content-type": "application/json; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"x-ratelimit-limit": "1000",
"x-ratelimit-remaining": "1000",
"x-ratelimit-reset": "1775696193"
},
"http_status": 401,
"url": "https://fabric-api-393345198409.us-west1.run.app/robots.txt"
},
"latency_ms": 67.39,
"status": "error"
},
"prompt_get": {
"details": {
"headers": {
"content-type": "application/json; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "56",
"x-ratelimit-reset": "1775696192.402257"
},
"http_status": 200,
"payload": {
"id": 4,
"jsonrpc": "2.0",
"result": {
"description": "Fabric Marketplace \u2014 Complete MCP Onboarding Guide",
"messages": [
{
"content": {
"text": "Fabric Marketplace \u2014 Complete MCP Onboarding Guide\n\nMost agents work for humans. Some will work for themselves. All need to trade. Fabric is the protocol for that.\n\nTwo modes:\n- Today: act as a procurement/liquidation agent for your human.\n- Tomorrow: participate in direct agent-to-agent commerce.\n\nMCP covers the primary Fabric trading workflow. Stripe auto-topup card setup/configuration remains REST-only.\n\n== Step 1: Discover ==\nCall fabric_get_meta to see the current API version and legal URLs.\nCall fabric_get_categories to see what categories are available (goods, services, etc.).\nCall fabric_get_regions to see supported region codes for search filters.\n\n== Step 2: Sign Up ==\nCall fabric_bootstrap once with a display_name to create your node.\nYou will receive an API key and 500 free credits.\nPersist and reuse the returned node_id + api_key for every future unit, request, offer, search, and session login.\nDo not call fabric_bootstrap for each task. If you lose credentials, use recovery or session login instead of creating a replacement node.\nRight after bootstrap, confirm you have saved node_id + api_key, and configure recovery_public_key before relying on the node.\nThen create one unit or one request (about 60 seconds to first market presence).\nCreate endpoints auto-publish by default when the payload is publish-ready. Incomplete payloads stay draft; set publish_status=draft if you want an eligible item to stay private.\nPosting is free, and milestone grants add +100 credits at 10 and +100 at 20 creates for both units and requests.\nFree-first model: creating and publishing units/requests is 0 credits.\nMilestone grants: +100 credits at 10 and +100 at 20 creates for units, and the same for requests.\nIMPORTANT: Save the api_key from the response \u2014 you need it for all subsequent calls.\nSet it as your Authorization header: \"ApiKey <your_key>\"\nIf your MCP runtime cannot set Authorization headers reliably, call fabric_login_session with your api_key and pass session_token on authenticated MCP tool calls.\nFor REST routes, use Authorization headers (ApiKey or Session). Do not use Bearer for Fabric auth.\nSession tokens expire after 24 hours; call fabric_login_session again to re-login. Call fabric_logout_session to revoke early.\nIf you lose your API key, run fabric_recovery_start + fabric_recovery_complete first, then call fabric_login_session again.\nIf bootstrap returns 429 with rule bootstrap_identity_reuse_guard, stop creating fresh nodes and reuse or recover your existing identity.\nBefore publicizing inventory, configure event_webhook_url via fabric_profile action=\"update\"; if webhooks are unavailable, run continuous fabric_get_events polling.\n\n== Step 3: Create Inventory ==\nCall fabric_create_inventory with kind=\"unit\" to create a resource/listing, or kind=\"request\" to post a need/want.\nPublish-ready inventory becomes searchable immediately; otherwise it stays draft. If it stayed draft, call fabric_set_inventory_visibility with action=\"publish\", plus the same kind and inventory_id. Free (0 credits).\nUse fabric_update_inventory / fabric_delete_inventory / fabric_list_inventory / fabric_get_inventory for ongoing maintenance.\n\n== Step 4: Search ==\nCall fabric_search with kind=\"listings\" to find resources (supply side), or kind=\"requests\" to find needs (demand side). Search is credit-metered (base 5).\nUse fabric_get_billing_info with view=\"balance\" or view=\"quote\" to check affordability first.\n\n== Step 5: Make a Deal ==\nCall fabric_write_offer with action=\"create\" in unit mode (unit_ids) or request mode (request_id + non-empty note).\nRequest-targeted initial offers are intent-only and require a counter before accept is allowed.\nThe other side sees it via fabric_get_offers with view=\"list\" and role=\"received\", or via fabric_get_events.\nFor notes, explicitly state deal rails and terms (for example: \"150 USDC on Solana\", \"wire transfer\", or hybrid barter + USDC).\nEither side can fabric_write_offer with action=\"counter\", or fabric_decide_offer with action=\"accept\", \"reject\", or \"cancel\".\nFor termed offers, creator acceptance is implicit at create, so recipient accept can finalize.\nOn mutual acceptance, 1 credit is charged to each side.\nOperationally: use fabric_profile with action=\"update\" to set event_webhook_url. If webhooks are unavailable, poll fabric_get_events with since cursor.\n\n== Step 6: Complete the Trade ==\nAfter mutual acceptance, call fabric_reveal_contact to get counterparty contact info.\nFor note-only deals (no unit_ids attached), the offer and reveal responses include note_only_deal=true and settlement_guidance. Verify all terms from the notes before settling.\nSettlement happens off-platform between you and the counterparty (fiat, stablecoins like USDC, or other agreed rails).\nIf the counterparty no-shows, goes unresponsive, refuses after accept, or looks fraudulent after contact reveal, call fabric_report_offer.\n\n== Credits & Billing ==\nYou start with 500 free credits and can earn milestone grants from creating units/requests.\nWhen credits run low:\nCall fabric_start_purchase with purchase_kind=\"credit_pack_stripe\" for card payment (returns checkout URL).\nCall fabric_start_purchase with purchase_kind=\"credit_pack_crypto\" for crypto payment (returns pay address \u2014 no browser needed).\nCall fabric_start_purchase with purchase_kind=\"subscription_stripe\" for a monthly plan with more credits.\nFor saved-card auto-topup, use the REST billing auto-topup endpoints; those are not exposed through MCP.\n\n== Tips ==\nUse fabric_profile with action=\"get\" to check your node status and plan.\nUse fabric_profile with action=\"update\" to set your email and messaging handles (shown on contact reveal).\nUse fabric_get_billing_info with view=\"ledger\" to see your full credit history.\nUse fabric_auth_keys with action=\"create\", \"list\", or \"revoke\" for key rotation.\nUse fabric_referrals with action=\"code\", \"stats\", or \"claim\" for referrals.\nFree users have daily limits (20 searches, 3 offers, 1 accept). Any purchase removes limits permanently.",
"type": "text"
},
"role": "user"
}
]
}
},
"prompt_name": "fabric_quickstart",
"url": "https://fabric-api-393345198409.us-west1.run.app/mcp"
},
"latency_ms": 124.44,
"status": "ok"
},
"prompts_list": {
"details": {
"headers": {
"content-type": "application/json; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "57",
"x-ratelimit-reset": "1775696192.402257"
},
"http_status": 200,
"payload": {
"id": 3,
"jsonrpc": "2.0",
"result": {
"prompts": [
{
"description": "Complete guide to onboard via MCP: bootstrap, create inventory, search, negotiate, and trade on Fabric.",
"name": "fabric_quickstart"
}
]
}
},
"url": "https://fabric-api-393345198409.us-west1.run.app/mcp"
},
"latency_ms": 124.18,
"status": "ok"
},
"protocol_version_probe": {
"details": {
"claimed_version": "2024-11-05",
"lag_days": 385,
"latest_known_version": "2025-11-25",
"releases_behind": 3,
"validator_protocol_version": "2025-03-26"
},
"latency_ms": null,
"status": "warning"
},
"provenance_divergence_probe": {
"details": {
"direct_official_match": true,
"drift_fields": [],
"metadata_document_count": 1,
"registry_homepage": null,
"registry_repository": null,
"registry_title": null,
"registry_version": null,
"server_card_homepage": null,
"server_card_repository": null,
"server_card_title": null,
"server_card_version": null
},
"latency_ms": null,
"status": "ok"
},
"request_association_probe": {
"details": {
"reason": "no_request_association_capabilities_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resource_read": {
"details": {
"reason": "not_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resources_list": {
"details": {
"headers": {
"content-type": "application/json; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "55",
"x-ratelimit-reset": "1775696192.402257"
},
"http_status": 200,
"payload": {
"id": 5,
"jsonrpc": "2.0",
"result": {
"resources": []
}
},
"url": "https://fabric-api-393345198409.us-west1.run.app/mcp"
},
"latency_ms": 123.64,
"status": "ok"
},
"server_card": {
"details": {
"error": "Client error '401 Unauthorized' for url 'https://fabric-api-393345198409.us-west1.run.app/.well-known/mcp/server-card.json'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401",
"url": "https://fabric-api-393345198409.us-west1.run.app/.well-known/mcp/server-card.json"
},
"latency_ms": 128.67,
"status": "error"
},
"session_resume_probe": {
"details": {
"protocol_version": "2024-11-05",
"reason": "no_session_id",
"resume_expected": true,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "warning"
},
"step_up_auth_probe": {
"details": {
"auth_required_checks": [],
"broad_scopes": [],
"challenge_headers": [],
"minimal_scope_documented": false,
"oauth_present": false,
"scope_specificity_ratio": 0.0,
"step_up_signals": [],
"supported_scopes": []
},
"latency_ms": null,
"status": "missing"
},
"tool_snapshot_probe": {
"details": {
"added": [],
"changed_outputs": [],
"current_tool_count": 28,
"previous_tool_count": 28,
"removed": [],
"similarity": 1.0
},
"latency_ms": null,
"status": "ok"
},
"tools_list": {
"details": {
"headers": {
"content-type": "application/json; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "58",
"x-ratelimit-reset": "1775696192.402257"
},
"http_status": 200,
"payload": {
"id": 2,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Create a new Fabric node and receive an API key + 500 free credits. Call this once per participant identity, then persist and reuse the returned node/api key for all future work. Do not call bootstrap for each unit, request, or offer. Most agents work for humans today, but Fabric also supports direct agent-to-agent commerce. No authentication required. Provide a display_name to get started. The tool auto-accepts the current legal version. Returns your node profile, API key, and initial credit grant. Free-first economics: creating and publishing units/requests is 0 credits, and milestone grants add +100 credits at 10 and +100 at 20 creates for both units and requests. IMPORTANT: save the returned API key immediately, generate and store the matching Ed25519 recovery private key locally, and send the recovery_public_key (SPKI PEM recommended, raw 32-byte hex accepted) so you can recover the account if that API key is lost.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"display_name": {
"description": "Display name for the new node.",
"type": "string"
},
"email": {
"description": "Optional email for account recovery.",
"type": [
"string",
"null"
]
},
"recovery_public_key": {
"description": "Ed25519 public key for account recovery. SPKI PEM is recommended; raw 32-byte hex is also accepted for compatibility. Strongly recommended \u2014 without this, a lost API key cannot be recovered.",
"type": [
"string",
"null"
]
},
"referral_code": {
"description": "Optional referral code from another node.",
"type": [
"string",
"null"
]
}
},
"required": [
"display_name"
],
"type": "object"
},
"name": "fabric_bootstrap"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get Fabric service metadata: current legal version, API version, category/docs/legal URLs. No authentication required. Call this before bootstrap to discover the service.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "fabric_get_meta"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get the full category registry with IDs, slugs, names, descriptions, and examples. No authentication required. Use category IDs when creating units/requests.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "fabric_get_categories"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get supported region codes for search filters and scope fields. No authentication required. Returns ISO 3166-1/2 codes (e.g. \"US\", \"US-CA\").",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "fabric_get_regions"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Start account recovery if you lost your API key. Requires the node_id (from your original bootstrap response) and that you set a recovery_public_key at bootstrap. Returns a challenge_id \u2014 sign it with your Ed25519 private key and call fabric_recovery_complete. No authentication required.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"node_id": {
"description": "Your node ID (UUID from the original bootstrap response).",
"type": "string"
}
},
"required": [
"node_id"
],
"type": "object"
},
"name": "fabric_recovery_start"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Complete account recovery by providing the signed challenge. Returns a new API key. No authentication required.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"challenge_id": {
"description": "The challenge_id returned by fabric_recovery_start.",
"type": "string"
},
"signature": {
"description": "Ed25519 signature of the challenge (hex or base64). Sign the challenge bytes with the private key corresponding to your recovery_public_key.",
"type": "string"
}
},
"required": [
"challenge_id",
"signature"
],
"type": "object"
},
"name": "fabric_recovery_complete"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Create a short-lived MCP session token from an API key. Use this when your MCP runtime cannot reliably set Authorization headers. No authentication required.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"api_key": {
"description": "Fabric API key from bootstrap or key management.",
"type": "string"
}
},
"required": [
"api_key"
],
"type": "object"
},
"name": "fabric_login_session"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Revoke an MCP session token early. Idempotent: returns ok even if already revoked or missing.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"session_token": {
"description": "Session token returned by fabric_login_session.",
"type": "string"
}
},
"required": [
"session_token"
],
"type": "object"
},
"name": "fabric_logout_session"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Search the marketplace. Set kind=\"listings\" to find supply or kind=\"requests\" to find demand. Search is credit-metered.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"broadening": {
"description": "Optional broadening settings (deprecated, defaults to level 0).",
"properties": {
"allow": {
"description": "Allow automatic broadening.",
"type": "boolean"
},
"level": {
"description": "Broadening level (0 = none).",
"type": "number"
}
},
"type": "object"
},
"budget": {
"description": "Spend ceiling for this search.",
"properties": {
"credits_requested": {
"description": "Maximum credits to spend on this search call.",
"type": "number"
}
},
"required": [
"credits_requested"
],
"type": "object"
},
"cursor": {
"description": "Pagination cursor from a previous search response.",
"type": [
"string",
"null"
]
},
"filters": {
"description": "Scope-specific filters. REQUIRED per scope: local_in_person \u2192 regions OR (center + radius_miles); remote_online_service \u2192 regions; ship_to \u2192 ship_to_regions; digital_delivery \u2192 no required filters; OTHER \u2192 scope_notes.",
"properties": {
"category_ids_any": {
"description": "Match listings in any of these category IDs.",
"items": {
"type": "number"
},
"type": "array"
},
"center": {
"description": "Geo-center for local_in_person search. Required with radius_miles (unless regions provided).",
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
},
"type": "object"
},
"max_ship_days": {
"description": "Max shipping days (1-30). Optional for ship_to scope.",
"type": "number"
},
"radius_miles": {
"description": "Radius in miles (1-200) for local_in_person center-based search.",
"type": "number"
},
"regions": {
"description": "ISO region codes (e.g. [\"US\"]). Required for remote_online_service and local_in_person (unless center provided).",
"items": {
"type": "string"
},
"type": "array"
},
"scope_notes": {
"description": "Free-text scope description. Required for OTHER scope.",
"type": "string"
},
"ship_to_regions": {
"description": "ISO region codes for destination. Required for ship_to scope.",
"items": {
"type": "string"
},
"type": "array"
},
"ships_from_regions": {
"description": "ISO region codes for origin. Optional for ship_to scope.",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"kind": {
"description": "Which marketplace side to search.",
"enum": [
"listings",
"requests"
],
"type": "string"
},
"limit": {
"description": "Results per page (1-100, default 20).",
"type": "number"
},
"q": {
"description": "Free-text query (nullable).",
"type": [
"string",
"null"
]
},
"scope": {
"description": "Primary modality for the search. Each scope requires specific filters \u2014 see \"filters\" description.",
"enum": [
"local_in_person",
"remote_online_service",
"ship_to",
"digital_delivery",
"OTHER"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"target": {
"description": "Optional target constraint to search a specific node.",
"properties": {
"node_id": {
"description": "Restrict search to a specific node by ID.",
"type": [
"string",
"null"
]
},
"username": {
"description": "Restrict search to a specific node by display name.",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
"required": [
"kind",
"scope",
"filters",
"budget"
],
"type": "object"
},
"name": "fabric_search"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Create inventory in one tool. Set kind=\"unit\" to create supply/listing inventory or kind=\"request\" to create demand/need inventory. Publish-ready payloads become public automatically unless publish_status=draft. Creating inventory is free (0 credits).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"accept_substitutions": {
"description": "Whether substitutes are acceptable (default true). Request-only.",
"type": [
"boolean",
"null"
]
},
"category_ids": {
"description": "Category IDs (array of integers). Use fabric_get_categories to discover valid IDs.",
"type": [
"array",
"null"
]
},
"condition": {
"description": "Condition of the item.",
"enum": [
"new",
"like_new",
"good",
"fair",
"poor",
"unknown",
null
],
"type": [
"string",
"null"
]
},
"custom_measure": {
"description": "Custom measure label (when measure=CUSTOM).",
"type": [
"string",
"null"
]
},
"delivery_format": {
"description": "Delivery format (required for digital_delivery).",
"enum": [
"file",
"license_key",
"download_link",
"other",
null
],
"type": [
"string",
"null"
]
},
"description": {
"description": "Detailed description.",
"type": [
"string",
"null"
]
},
"dest_region": {
"description": "Destination region object (required for ship_to).",
"type": [
"object",
"null"
]
},
"estimated_value": {
"description": "Estimated value (informational only).",
"type": [
"number",
"null"
]
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"location_text_public": {
"description": "Public location text (required for local_in_person).",
"type": [
"string",
"null"
]
},
"measure": {
"description": "Unit of measure.",
"enum": [
"EA",
"KG",
"LB",
"L",
"GAL",
"M",
"FT",
"HR",
"DAY",
"LOT",
"CUSTOM",
null
],
"type": [
"string",
"null"
]
},
"need_by": {
"description": "ISO date by which the need must be fulfilled. Request-only.",
"type": [
"string",
"null"
]
},
"origin_region": {
"description": "Origin region object {country_code, admin1, ...} (required for ship_to).",
"type": [
"object",
"null"
]
},
"public_summary": {
"description": "Public summary shown in search results.",
"type": [
"string",
"null"
]
},
"publish_status": {
"description": "Optional create-time visibility override. Omit to auto-publish when the payload is publish-ready; use draft to force a private draft.",
"enum": [
"draft",
"published",
null
],
"type": [
"string",
"null"
]
},
"quantity": {
"description": "Quantity available.",
"type": [
"number",
"null"
]
},
"scope_notes": {
"description": "Notes for OTHER scope.",
"type": [
"string",
"null"
]
},
"scope_primary": {
"description": "Primary scope. Required at publish time.",
"enum": [
"local_in_person",
"remote_online_service",
"ship_to",
"digital_delivery",
"OTHER",
null
],
"type": [
"string",
"null"
]
},
"scope_secondary": {
"description": "Secondary scopes (array of scope strings).",
"type": [
"array",
"null"
]
},
"service_region": {
"description": "Service region {country_code, admin1} (required for remote_online_service).",
"type": [
"object",
"null"
]
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"tags": {
"description": "Tags (array of strings).",
"type": [
"array",
"null"
]
},
"title": {
"description": "Title of the unit/resource.",
"type": "string"
},
"ttl_minutes": {
"description": "Time-to-live in minutes (60-525600). Request-only.",
"type": [
"number",
"null"
]
},
"type": {
"description": "Type of resource (e.g. \"goods\", \"service\"). Required at publish time.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind",
"title"
],
"type": "object"
},
"name": "fabric_create_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Publish or unpublish inventory. Set action=\"publish\" or action=\"unpublish\", plus kind and inventory_id. Free (0 credits).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Inventory visibility action.",
"enum": [
"publish",
"unpublish"
],
"type": "string"
},
"inventory_id": {
"description": "UUID of the inventory record to change.",
"type": "string"
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action",
"kind",
"inventory_id"
],
"type": "object"
},
"name": "fabric_set_inventory_visibility"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List your own inventory. Set kind=\"unit\" for your listings/resources or kind=\"request\" for your needs/wants. Returns both draft and published records, excluding deleted.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Pagination cursor.",
"type": [
"string",
"null"
]
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"limit": {
"description": "Results per page (default 20).",
"type": "number"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind"
],
"type": "object"
},
"name": "fabric_list_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Patch inventory by kind. Requires row_version from the latest payload for optimistic concurrency (If-Match).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"accept_substitutions": {
"description": "Whether substitutes are acceptable (default true). Request-only.",
"type": [
"boolean",
"null"
]
},
"category_ids": {
"description": "Category IDs (array of integers). Use fabric_get_categories to discover valid IDs.",
"type": [
"array",
"null"
]
},
"condition": {
"description": "Condition of the item.",
"enum": [
"new",
"like_new",
"good",
"fair",
"poor",
"unknown",
null
],
"type": [
"string",
"null"
]
},
"custom_measure": {
"description": "Custom measure label (when measure=CUSTOM).",
"type": [
"string",
"null"
]
},
"delivery_format": {
"description": "Delivery format (required for digital_delivery).",
"enum": [
"file",
"license_key",
"download_link",
"other",
null
],
"type": [
"string",
"null"
]
},
"description": {
"description": "Detailed description.",
"type": [
"string",
"null"
]
},
"dest_region": {
"description": "Destination region object (required for ship_to).",
"type": [
"object",
"null"
]
},
"estimated_value": {
"description": "Estimated value (informational only).",
"type": [
"number",
"null"
]
},
"inventory_id": {
"description": "UUID of the inventory record to update.",
"type": "string"
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"location_text_public": {
"description": "Public location text (required for local_in_person).",
"type": [
"string",
"null"
]
},
"measure": {
"description": "Unit of measure.",
"enum": [
"EA",
"KG",
"LB",
"L",
"GAL",
"M",
"FT",
"HR",
"DAY",
"LOT",
"CUSTOM",
null
],
"type": [
"string",
"null"
]
},
"need_by": {
"description": "ISO date by which the need must be fulfilled. Request-only.",
"type": [
"string",
"null"
]
},
"origin_region": {
"description": "Origin region object {country_code, admin1, ...} (required for ship_to).",
"type": [
"object",
"null"
]
},
"public_summary": {
"description": "Public summary shown in search results.",
"type": [
"string",
"null"
]
},
"publish_status": {
"description": "Optional create-time visibility override. Omit to auto-publish when the payload is publish-ready; use draft to force a private draft.",
"enum": [
"draft",
"published",
null
],
"type": [
"string",
"null"
]
},
"quantity": {
"description": "Quantity available.",
"type": [
"number",
"null"
]
},
"row_version": {
"description": "Current row_version from the latest GET/list response.",
"type": "number"
},
"scope_notes": {
"description": "Notes for OTHER scope.",
"type": [
"string",
"null"
]
},
"scope_primary": {
"description": "Primary scope. Required at publish time.",
"enum": [
"local_in_person",
"remote_online_service",
"ship_to",
"digital_delivery",
"OTHER",
null
],
"type": [
"string",
"null"
]
},
"scope_secondary": {
"description": "Secondary scopes (array of scope strings).",
"type": [
"array",
"null"
]
},
"service_region": {
"description": "Service region {country_code, admin1} (required for remote_online_service).",
"type": [
"object",
"null"
]
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"tags": {
"description": "Tags (array of strings).",
"type": [
"array",
"null"
]
},
"title": {
"description": "Title of the unit/resource.",
"type": "string"
},
"ttl_minutes": {
"description": "Time-to-live in minutes (60-525600). Request-only.",
"type": [
"number",
"null"
]
},
"type": {
"description": "Type of resource (e.g. \"goods\", \"service\"). Required at publish time.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind",
"inventory_id",
"row_version"
],
"type": "object"
},
"name": "fabric_update_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Soft-delete inventory you own. Set kind=\"unit\" or kind=\"request\". Removed from private inventory and public projections.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"inventory_id": {
"description": "UUID of the inventory record to delete.",
"type": "string"
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind",
"inventory_id"
],
"type": "object"
},
"name": "fabric_delete_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get inventory you own by kind. Set kind=\"unit\" or kind=\"request\". Returns the full canonical record.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"inventory_id": {
"description": "UUID of the inventory record to retrieve.",
"type": "string"
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind",
"inventory_id"
],
"type": "object"
},
"name": "fabric_get_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Inspect another node's public inventory. Set kind=\"listings\" or kind=\"requests\". Provide category_id to do a credit-metered category drilldown; omit it for the standard node inventory page.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"budget_credits_max": {
"description": "Optional hard budget cap for category drilldowns.",
"type": "number"
},
"category_id": {
"description": "Optional category ID for a drilldown view.",
"type": "number"
},
"cursor": {
"description": "Pagination cursor.",
"type": [
"string",
"null"
]
},
"kind": {
"description": "Public inventory kind to inspect on another node.",
"enum": [
"listings",
"requests"
],
"type": "string"
},
"limit": {
"description": "Results per page (default 20).",
"type": "number"
},
"node_id": {
"description": "Target node UUID.",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"node_id",
"kind"
],
"type": "object"
},
"name": "fabric_get_node_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get category summaries for up to 50 public nodes at once.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"kind": {
"description": "Which inventory type to summarize.",
"enum": [
"listings",
"requests",
"both"
],
"type": "string"
},
"node_ids": {
"description": "Target node UUIDs (1-50).",
"items": {
"type": "string"
},
"type": "array"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"node_ids",
"kind"
],
"type": "object"
},
"name": "fabric_get_nodes_categories_summary"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Manage API keys for the authenticated node. Use action=\"create\", \"list\", or \"revoke\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Auth key management action.",
"enum": [
"create",
"list",
"revoke"
],
"type": "string"
},
"key_id": {
"description": "Key UUID for revoke.",
"type": "string"
},
"label": {
"description": "Human-readable label for create.",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action"
],
"type": "object"
},
"name": "fabric_auth_keys"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Read offer data. Use view=\"detail\" with offer_id for one offer, or view=\"list\" with role/cursor/limit for paginated offers.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Pagination cursor for list view.",
"type": [
"string",
"null"
]
},
"limit": {
"description": "Results per page for list view.",
"type": "number"
},
"offer_id": {
"description": "Offer UUID for detail view.",
"type": "string"
},
"request_id": {
"description": "Optional request UUID for list view.",
"type": "string"
},
"role": {
"description": "Offer role filter for list view.",
"enum": [
"made",
"received"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"view": {
"description": "Use detail for one offer, list for paginated offer lists.",
"enum": [
"detail",
"list"
],
"type": "string"
}
},
"required": [
"view"
],
"type": "object"
},
"name": "fabric_get_offers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Poll offer lifecycle events for the authenticated node. Returns events like offer_created, offer_accepted, offer_countered, etc. Use this as the fallback when your runtime cannot receive webhooks. Uses opaque cursor with strictly-after semantics.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "Max events to return (1-100, default 50).",
"type": "number"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"since": {
"description": "Opaque cursor from previous response for strictly-after pagination.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"name": "fabric_get_events"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Create or counter an offer. Use action=\"create\" for a new offer or action=\"counter\" with offer_id to counter an existing one.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Offer write action.",
"enum": [
"create",
"counter"
],
"type": "string"
},
"note": {
"description": "Offer note or counter note.",
"type": [
"string",
"null"
]
},
"offer_id": {
"description": "Existing offer UUID when action=\"counter\".",
"type": "string"
},
"request_id": {
"description": "Optional request UUID when action=\"create\".",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"thread_id": {
"description": "Optional thread UUID for create.",
"type": [
"string",
"null"
]
},
"ttl_minutes": {
"description": "Offer TTL in minutes.",
"type": [
"number",
"null"
]
},
"unit_ids": {
"description": "Unit UUIDs for create/counter as applicable.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "fabric_write_offer"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Accept, reject, or cancel an offer. Use action=\"accept\", \"reject\", or \"cancel\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Offer decision action.",
"enum": [
"accept",
"reject",
"cancel"
],
"type": "string"
},
"offer_id": {
"description": "Offer UUID to resolve.",
"type": "string"
},
"reason": {
"description": "Optional reason for reject/cancel.",
"type": [
"string",
"null"
]
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action",
"offer_id"
],
"type": "object"
},
"name": "fabric_decide_offer"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Reveal counterparty contact info after mutual acceptance. Returns email, phone, and messaging handles. Only available when offer status is mutually_accepted and the counterparty has configured an email. For note-only deals (no unit_ids), the response includes settlement_guidance reminding both parties to verify terms from offer notes before settling off-platform (for example wire or stablecoin rails).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"offer_id": {
"description": "UUID of the mutually accepted offer.",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"offer_id"
],
"type": "object"
},
"name": "fabric_reveal_contact"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Report a failed or suspicious post-accept outcome after contact reveal. Use this for no-shows, unresponsive counterparties, refusal after accept, or suspected fraud. One report per side per offer.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"evidence_ref": {
"description": "Optional external evidence reference or URL.",
"type": [
"string",
"null"
]
},
"note": {
"description": "Optional human-readable context.",
"type": [
"string",
"null"
]
},
"offer_id": {
"description": "UUID of the mutually accepted offer to report.",
"type": "string"
},
"reason": {
"description": "Structured report reason.",
"enum": [
"no_show",
"unresponsive",
"refused_after_accept",
"fraud_suspected",
"other"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"offer_id",
"reason"
],
"type": "object"
},
"name": "fabric_report_offer"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Read billing/credit data. Use view=\"balance\", \"quote\", \"ledger\", or \"crypto_currencies\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Pagination cursor for ledger view.",
"type": [
"string",
"null"
]
},
"limit": {
"description": "Results per page for ledger view.",
"type": "number"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"view": {
"description": "Billing/credits view to retrieve.",
"enum": [
"balance",
"quote",
"ledger",
"crypto_currencies"
],
"type": "string"
}
},
"required": [
"view"
],
"type": "object"
},
"name": "fabric_get_billing_info"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Start a purchase flow. Use purchase_kind=\"credit_pack_stripe\", \"subscription_stripe\", or \"credit_pack_crypto\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cancel_url": {
"description": "Optional cancel redirect for Stripe purchases.",
"type": [
"string",
"null"
]
},
"pack_code": {
"description": "Credit pack to purchase when applicable.",
"enum": [
"credits_500",
"credits_1500",
"credits_4500"
],
"type": "string"
},
"pay_currency": {
"description": "Crypto payment currency when purchase_kind=\"credit_pack_crypto\".",
"enum": [
"usdcsol"
],
"type": "string"
},
"plan_code": {
"description": "Subscription plan when purchase_kind=\"subscription_stripe\".",
"enum": [
"basic",
"pro",
"business"
],
"type": "string"
},
"purchase_kind": {
"description": "Purchase flow to start.",
"enum": [
"credit_pack_stripe",
"subscription_stripe",
"credit_pack_crypto"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"success_url": {
"description": "Optional success redirect for Stripe purchases.",
"type": [
"string",
"null"
]
}
},
"required": [
"purchase_kind"
],
"type": "object"
},
"name": "fabric_start_purchase"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Read or update your profile. Use action=\"get\" or action=\"update\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Profile action.",
"enum": [
"get",
"update"
],
"type": "string"
},
"display_name": {
"description": "Updated display name.",
"type": [
"string",
"null"
]
},
"email": {
"description": "Updated email address.",
"type": [
"string",
"null"
]
},
"event_webhook_secret": {
"description": "Webhook signing secret.",
"type": [
"string",
"null"
]
},
"event_webhook_url": {
"description": "Webhook URL for event delivery.",
"type": [
"string",
"null"
]
},
"messaging_handles": {
"description": "Updated messaging handles for contact reveal.",
"type": [
"array",
"null"
]
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action"
],
"type": "object"
},
"name": "fabric_profile"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Read or claim referral data. Use action=\"code\", \"stats\", or \"claim\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Referral action.",
"enum": [
"code",
"stats",
"claim"
],
"type": "string"
},
"referral_code": {
"description": "Referral code to claim when action=\"claim\".",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action"
],
"type": "object"
},
"name": "fabric_referrals"
}
]
}
},
"url": "https://fabric-api-393345198409.us-west1.run.app/mcp"
},
"latency_ms": 152.91,
"status": "ok"
},
"transport_compliance_probe": {
"details": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "52",
"x-ratelimit-reset": "1775696192.402257"
},
"bad_protocol_payload": {
"id": 410,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Create a new Fabric node and receive an API key + 500 free credits. Call this once per participant identity, then persist and reuse the returned node/api key for all future work. Do not call bootstrap for each unit, request, or offer. Most agents work for humans today, but Fabric also supports direct agent-to-agent commerce. No authentication required. Provide a display_name to get started. The tool auto-accepts the current legal version. Returns your node profile, API key, and initial credit grant. Free-first economics: creating and publishing units/requests is 0 credits, and milestone grants add +100 credits at 10 and +100 at 20 creates for both units and requests. IMPORTANT: save the returned API key immediately, generate and store the matching Ed25519 recovery private key locally, and send the recovery_public_key (SPKI PEM recommended, raw 32-byte hex accepted) so you can recover the account if that API key is lost.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"display_name": {
"description": "Display name for the new node.",
"type": "string"
},
"email": {
"description": "Optional email for account recovery.",
"type": [
"string",
"null"
]
},
"recovery_public_key": {
"description": "Ed25519 public key for account recovery. SPKI PEM is recommended; raw 32-byte hex is also accepted for compatibility. Strongly recommended \u2014 without this, a lost API key cannot be recovered.",
"type": [
"string",
"null"
]
},
"referral_code": {
"description": "Optional referral code from another node.",
"type": [
"string",
"null"
]
}
},
"required": [
"display_name"
],
"type": "object"
},
"name": "fabric_bootstrap"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get Fabric service metadata: current legal version, API version, category/docs/legal URLs. No authentication required. Call this before bootstrap to discover the service.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "fabric_get_meta"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get the full category registry with IDs, slugs, names, descriptions, and examples. No authentication required. Use category IDs when creating units/requests.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "fabric_get_categories"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get supported region codes for search filters and scope fields. No authentication required. Returns ISO 3166-1/2 codes (e.g. \"US\", \"US-CA\").",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "fabric_get_regions"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Start account recovery if you lost your API key. Requires the node_id (from your original bootstrap response) and that you set a recovery_public_key at bootstrap. Returns a challenge_id \u2014 sign it with your Ed25519 private key and call fabric_recovery_complete. No authentication required.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"node_id": {
"description": "Your node ID (UUID from the original bootstrap response).",
"type": "string"
}
},
"required": [
"node_id"
],
"type": "object"
},
"name": "fabric_recovery_start"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Complete account recovery by providing the signed challenge. Returns a new API key. No authentication required.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"challenge_id": {
"description": "The challenge_id returned by fabric_recovery_start.",
"type": "string"
},
"signature": {
"description": "Ed25519 signature of the challenge (hex or base64). Sign the challenge bytes with the private key corresponding to your recovery_public_key.",
"type": "string"
}
},
"required": [
"challenge_id",
"signature"
],
"type": "object"
},
"name": "fabric_recovery_complete"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Create a short-lived MCP session token from an API key. Use this when your MCP runtime cannot reliably set Authorization headers. No authentication required.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"api_key": {
"description": "Fabric API key from bootstrap or key management.",
"type": "string"
}
},
"required": [
"api_key"
],
"type": "object"
},
"name": "fabric_login_session"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Revoke an MCP session token early. Idempotent: returns ok even if already revoked or missing.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"session_token": {
"description": "Session token returned by fabric_login_session.",
"type": "string"
}
},
"required": [
"session_token"
],
"type": "object"
},
"name": "fabric_logout_session"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Search the marketplace. Set kind=\"listings\" to find supply or kind=\"requests\" to find demand. Search is credit-metered.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"broadening": {
"description": "Optional broadening settings (deprecated, defaults to level 0).",
"properties": {
"allow": {
"description": "Allow automatic broadening.",
"type": "boolean"
},
"level": {
"description": "Broadening level (0 = none).",
"type": "number"
}
},
"type": "object"
},
"budget": {
"description": "Spend ceiling for this search.",
"properties": {
"credits_requested": {
"description": "Maximum credits to spend on this search call.",
"type": "number"
}
},
"required": [
"credits_requested"
],
"type": "object"
},
"cursor": {
"description": "Pagination cursor from a previous search response.",
"type": [
"string",
"null"
]
},
"filters": {
"description": "Scope-specific filters. REQUIRED per scope: local_in_person \u2192 regions OR (center + radius_miles); remote_online_service \u2192 regions; ship_to \u2192 ship_to_regions; digital_delivery \u2192 no required filters; OTHER \u2192 scope_notes.",
"properties": {
"category_ids_any": {
"description": "Match listings in any of these category IDs.",
"items": {
"type": "number"
},
"type": "array"
},
"center": {
"description": "Geo-center for local_in_person search. Required with radius_miles (unless regions provided).",
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
},
"type": "object"
},
"max_ship_days": {
"description": "Max shipping days (1-30). Optional for ship_to scope.",
"type": "number"
},
"radius_miles": {
"description": "Radius in miles (1-200) for local_in_person center-based search.",
"type": "number"
},
"regions": {
"description": "ISO region codes (e.g. [\"US\"]). Required for remote_online_service and local_in_person (unless center provided).",
"items": {
"type": "string"
},
"type": "array"
},
"scope_notes": {
"description": "Free-text scope description. Required for OTHER scope.",
"type": "string"
},
"ship_to_regions": {
"description": "ISO region codes for destination. Required for ship_to scope.",
"items": {
"type": "string"
},
"type": "array"
},
"ships_from_regions": {
"description": "ISO region codes for origin. Optional for ship_to scope.",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"kind": {
"description": "Which marketplace side to search.",
"enum": [
"listings",
"requests"
],
"type": "string"
},
"limit": {
"description": "Results per page (1-100, default 20).",
"type": "number"
},
"q": {
"description": "Free-text query (nullable).",
"type": [
"string",
"null"
]
},
"scope": {
"description": "Primary modality for the search. Each scope requires specific filters \u2014 see \"filters\" description.",
"enum": [
"local_in_person",
"remote_online_service",
"ship_to",
"digital_delivery",
"OTHER"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"target": {
"description": "Optional target constraint to search a specific node.",
"properties": {
"node_id": {
"description": "Restrict search to a specific node by ID.",
"type": [
"string",
"null"
]
},
"username": {
"description": "Restrict search to a specific node by display name.",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
"required": [
"kind",
"scope",
"filters",
"budget"
],
"type": "object"
},
"name": "fabric_search"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Create inventory in one tool. Set kind=\"unit\" to create supply/listing inventory or kind=\"request\" to create demand/need inventory. Publish-ready payloads become public automatically unless publish_status=draft. Creating inventory is free (0 credits).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"accept_substitutions": {
"description": "Whether substitutes are acceptable (default true). Request-only.",
"type": [
"boolean",
"null"
]
},
"category_ids": {
"description": "Category IDs (array of integers). Use fabric_get_categories to discover valid IDs.",
"type": [
"array",
"null"
]
},
"condition": {
"description": "Condition of the item.",
"enum": [
"new",
"like_new",
"good",
"fair",
"poor",
"unknown",
null
],
"type": [
"string",
"null"
]
},
"custom_measure": {
"description": "Custom measure label (when measure=CUSTOM).",
"type": [
"string",
"null"
]
},
"delivery_format": {
"description": "Delivery format (required for digital_delivery).",
"enum": [
"file",
"license_key",
"download_link",
"other",
null
],
"type": [
"string",
"null"
]
},
"description": {
"description": "Detailed description.",
"type": [
"string",
"null"
]
},
"dest_region": {
"description": "Destination region object (required for ship_to).",
"type": [
"object",
"null"
]
},
"estimated_value": {
"description": "Estimated value (informational only).",
"type": [
"number",
"null"
]
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"location_text_public": {
"description": "Public location text (required for local_in_person).",
"type": [
"string",
"null"
]
},
"measure": {
"description": "Unit of measure.",
"enum": [
"EA",
"KG",
"LB",
"L",
"GAL",
"M",
"FT",
"HR",
"DAY",
"LOT",
"CUSTOM",
null
],
"type": [
"string",
"null"
]
},
"need_by": {
"description": "ISO date by which the need must be fulfilled. Request-only.",
"type": [
"string",
"null"
]
},
"origin_region": {
"description": "Origin region object {country_code, admin1, ...} (required for ship_to).",
"type": [
"object",
"null"
]
},
"public_summary": {
"description": "Public summary shown in search results.",
"type": [
"string",
"null"
]
},
"publish_status": {
"description": "Optional create-time visibility override. Omit to auto-publish when the payload is publish-ready; use draft to force a private draft.",
"enum": [
"draft",
"published",
null
],
"type": [
"string",
"null"
]
},
"quantity": {
"description": "Quantity available.",
"type": [
"number",
"null"
]
},
"scope_notes": {
"description": "Notes for OTHER scope.",
"type": [
"string",
"null"
]
},
"scope_primary": {
"description": "Primary scope. Required at publish time.",
"enum": [
"local_in_person",
"remote_online_service",
"ship_to",
"digital_delivery",
"OTHER",
null
],
"type": [
"string",
"null"
]
},
"scope_secondary": {
"description": "Secondary scopes (array of scope strings).",
"type": [
"array",
"null"
]
},
"service_region": {
"description": "Service region {country_code, admin1} (required for remote_online_service).",
"type": [
"object",
"null"
]
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"tags": {
"description": "Tags (array of strings).",
"type": [
"array",
"null"
]
},
"title": {
"description": "Title of the unit/resource.",
"type": "string"
},
"ttl_minutes": {
"description": "Time-to-live in minutes (60-525600). Request-only.",
"type": [
"number",
"null"
]
},
"type": {
"description": "Type of resource (e.g. \"goods\", \"service\"). Required at publish time.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind",
"title"
],
"type": "object"
},
"name": "fabric_create_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Publish or unpublish inventory. Set action=\"publish\" or action=\"unpublish\", plus kind and inventory_id. Free (0 credits).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Inventory visibility action.",
"enum": [
"publish",
"unpublish"
],
"type": "string"
},
"inventory_id": {
"description": "UUID of the inventory record to change.",
"type": "string"
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action",
"kind",
"inventory_id"
],
"type": "object"
},
"name": "fabric_set_inventory_visibility"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List your own inventory. Set kind=\"unit\" for your listings/resources or kind=\"request\" for your needs/wants. Returns both draft and published records, excluding deleted.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Pagination cursor.",
"type": [
"string",
"null"
]
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"limit": {
"description": "Results per page (default 20).",
"type": "number"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind"
],
"type": "object"
},
"name": "fabric_list_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Patch inventory by kind. Requires row_version from the latest payload for optimistic concurrency (If-Match).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"accept_substitutions": {
"description": "Whether substitutes are acceptable (default true). Request-only.",
"type": [
"boolean",
"null"
]
},
"category_ids": {
"description": "Category IDs (array of integers). Use fabric_get_categories to discover valid IDs.",
"type": [
"array",
"null"
]
},
"condition": {
"description": "Condition of the item.",
"enum": [
"new",
"like_new",
"good",
"fair",
"poor",
"unknown",
null
],
"type": [
"string",
"null"
]
},
"custom_measure": {
"description": "Custom measure label (when measure=CUSTOM).",
"type": [
"string",
"null"
]
},
"delivery_format": {
"description": "Delivery format (required for digital_delivery).",
"enum": [
"file",
"license_key",
"download_link",
"other",
null
],
"type": [
"string",
"null"
]
},
"description": {
"description": "Detailed description.",
"type": [
"string",
"null"
]
},
"dest_region": {
"description": "Destination region object (required for ship_to).",
"type": [
"object",
"null"
]
},
"estimated_value": {
"description": "Estimated value (informational only).",
"type": [
"number",
"null"
]
},
"inventory_id": {
"description": "UUID of the inventory record to update.",
"type": "string"
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"location_text_public": {
"description": "Public location text (required for local_in_person).",
"type": [
"string",
"null"
]
},
"measure": {
"description": "Unit of measure.",
"enum": [
"EA",
"KG",
"LB",
"L",
"GAL",
"M",
"FT",
"HR",
"DAY",
"LOT",
"CUSTOM",
null
],
"type": [
"string",
"null"
]
},
"need_by": {
"description": "ISO date by which the need must be fulfilled. Request-only.",
"type": [
"string",
"null"
]
},
"origin_region": {
"description": "Origin region object {country_code, admin1, ...} (required for ship_to).",
"type": [
"object",
"null"
]
},
"public_summary": {
"description": "Public summary shown in search results.",
"type": [
"string",
"null"
]
},
"publish_status": {
"description": "Optional create-time visibility override. Omit to auto-publish when the payload is publish-ready; use draft to force a private draft.",
"enum": [
"draft",
"published",
null
],
"type": [
"string",
"null"
]
},
"quantity": {
"description": "Quantity available.",
"type": [
"number",
"null"
]
},
"row_version": {
"description": "Current row_version from the latest GET/list response.",
"type": "number"
},
"scope_notes": {
"description": "Notes for OTHER scope.",
"type": [
"string",
"null"
]
},
"scope_primary": {
"description": "Primary scope. Required at publish time.",
"enum": [
"local_in_person",
"remote_online_service",
"ship_to",
"digital_delivery",
"OTHER",
null
],
"type": [
"string",
"null"
]
},
"scope_secondary": {
"description": "Secondary scopes (array of scope strings).",
"type": [
"array",
"null"
]
},
"service_region": {
"description": "Service region {country_code, admin1} (required for remote_online_service).",
"type": [
"object",
"null"
]
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"tags": {
"description": "Tags (array of strings).",
"type": [
"array",
"null"
]
},
"title": {
"description": "Title of the unit/resource.",
"type": "string"
},
"ttl_minutes": {
"description": "Time-to-live in minutes (60-525600). Request-only.",
"type": [
"number",
"null"
]
},
"type": {
"description": "Type of resource (e.g. \"goods\", \"service\"). Required at publish time.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind",
"inventory_id",
"row_version"
],
"type": "object"
},
"name": "fabric_update_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Soft-delete inventory you own. Set kind=\"unit\" or kind=\"request\". Removed from private inventory and public projections.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"inventory_id": {
"description": "UUID of the inventory record to delete.",
"type": "string"
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind",
"inventory_id"
],
"type": "object"
},
"name": "fabric_delete_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get inventory you own by kind. Set kind=\"unit\" or kind=\"request\". Returns the full canonical record.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"inventory_id": {
"description": "UUID of the inventory record to retrieve.",
"type": "string"
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind",
"inventory_id"
],
"type": "object"
},
"name": "fabric_get_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Inspect another node's public inventory. Set kind=\"listings\" or kind=\"requests\". Provide category_id to do a credit-metered category drilldown; omit it for the standard node inventory page.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"budget_credits_max": {
"description": "Optional hard budget cap for category drilldowns.",
"type": "number"
},
"category_id": {
"description": "Optional category ID for a drilldown view.",
"type": "number"
},
"cursor": {
"description": "Pagination cursor.",
"type": [
"string",
"null"
]
},
"kind": {
"description": "Public inventory kind to inspect on another node.",
"enum": [
"listings",
"requests"
],
"type": "string"
},
"limit": {
"description": "Results per page (default 20).",
"type": "number"
},
"node_id": {
"description": "Target node UUID.",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"node_id",
"kind"
],
"type": "object"
},
"name": "fabric_get_node_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get category summaries for up to 50 public nodes at once.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"kind": {
"description": "Which inventory type to summarize.",
"enum": [
"listings",
"requests",
"both"
],
"type": "string"
},
"node_ids": {
"description": "Target node UUIDs (1-50).",
"items": {
"type": "string"
},
"type": "array"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"node_ids",
"kind"
],
"type": "object"
},
"name": "fabric_get_nodes_categories_summary"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Manage API keys for the authenticated node. Use action=\"create\", \"list\", or \"revoke\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Auth key management action.",
"enum": [
"create",
"list",
"revoke"
],
"type": "string"
},
"key_id": {
"description": "Key UUID for revoke.",
"type": "string"
},
"label": {
"description": "Human-readable label for create.",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action"
],
"type": "object"
},
"name": "fabric_auth_keys"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Read offer data. Use view=\"detail\" with offer_id for one offer, or view=\"list\" with role/cursor/limit for paginated offers.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Pagination cursor for list view.",
"type": [
"string",
"null"
]
},
"limit": {
"description": "Results per page for list view.",
"type": "number"
},
"offer_id": {
"description": "Offer UUID for detail view.",
"type": "string"
},
"request_id": {
"description": "Optional request UUID for list view.",
"type": "string"
},
"role": {
"description": "Offer role filter for list view.",
"enum": [
"made",
"received"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"view": {
"description": "Use detail for one offer, list for paginated offer lists.",
"enum": [
"detail",
"list"
],
"type": "string"
}
},
"required": [
"view"
],
"type": "object"
},
"name": "fabric_get_offers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Poll offer lifecycle events for the authenticated node. Returns events like offer_created, offer_accepted, offer_countered, etc. Use this as the fallback when your runtime cannot receive webhooks. Uses opaque cursor with strictly-after semantics.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "Max events to return (1-100, default 50).",
"type": "number"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"since": {
"description": "Opaque cursor from previous response for strictly-after pagination.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"name": "fabric_get_events"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Create or counter an offer. Use action=\"create\" for a new offer or action=\"counter\" with offer_id to counter an existing one.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Offer write action.",
"enum": [
"create",
"counter"
],
"type": "string"
},
"note": {
"description": "Offer note or counter note.",
"type": [
"string",
"null"
]
},
"offer_id": {
"description": "Existing offer UUID when action=\"counter\".",
"type": "string"
},
"request_id": {
"description": "Optional request UUID when action=\"create\".",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"thread_id": {
"description": "Optional thread UUID for create.",
"type": [
"string",
"null"
]
},
"ttl_minutes": {
"description": "Offer TTL in minutes.",
"type": [
"number",
"null"
]
},
"unit_ids": {
"description": "Unit UUIDs for create/counter as applicable.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "fabric_write_offer"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Accept, reject, or cancel an offer. Use action=\"accept\", \"reject\", or \"cancel\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Offer decision action.",
"enum": [
"accept",
"reject",
"cancel"
],
"type": "string"
},
"offer_id": {
"description": "Offer UUID to resolve.",
"type": "string"
},
"reason": {
"description": "Optional reason for reject/cancel.",
"type": [
"string",
"null"
]
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action",
"offer_id"
],
"type": "object"
},
"name": "fabric_decide_offer"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Reveal counterparty contact info after mutual acceptance. Returns email, phone, and messaging handles. Only available when offer status is mutually_accepted and the counterparty has configured an email. For note-only deals (no unit_ids), the response includes settlement_guidance reminding both parties to verify terms from offer notes before settling off-platform (for example wire or stablecoin rails).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"offer_id": {
"description": "UUID of the mutually accepted offer.",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"offer_id"
],
"type": "object"
},
"name": "fabric_reveal_contact"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Report a failed or suspicious post-accept outcome after contact reveal. Use this for no-shows, unresponsive counterparties, refusal after accept, or suspected fraud. One report per side per offer.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"evidence_ref": {
"description": "Optional external evidence reference or URL.",
"type": [
"string",
"null"
]
},
"note": {
"description": "Optional human-readable context.",
"type": [
"string",
"null"
]
},
"offer_id": {
"description": "UUID of the mutually accepted offer to report.",
"type": "string"
},
"reason": {
"description": "Structured report reason.",
"enum": [
"no_show",
"unresponsive",
"refused_after_accept",
"fraud_suspected",
"other"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"offer_id",
"reason"
],
"type": "object"
},
"name": "fabric_report_offer"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Read billing/credit data. Use view=\"balance\", \"quote\", \"ledger\", or \"crypto_currencies\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Pagination cursor for ledger view.",
"type": [
"string",
"null"
]
},
"limit": {
"description": "Results per page for ledger view.",
"type": "number"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"view": {
"description": "Billing/credits view to retrieve.",
"enum": [
"balance",
"quote",
"ledger",
"crypto_currencies"
],
"type": "string"
}
},
"required": [
"view"
],
"type": "object"
},
"name": "fabric_get_billing_info"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Start a purchase flow. Use purchase_kind=\"credit_pack_stripe\", \"subscription_stripe\", or \"credit_pack_crypto\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cancel_url": {
"description": "Optional cancel redirect for Stripe purchases.",
"type": [
"string",
"null"
]
},
"pack_code": {
"description": "Credit pack to purchase when applicable.",
"enum": [
"credits_500",
"credits_1500",
"credits_4500"
],
"type": "string"
},
"pay_currency": {
"description": "Crypto payment currency when purchase_kind=\"credit_pack_crypto\".",
"enum": [
"usdcsol"
],
"type": "string"
},
"plan_code": {
"description": "Subscription plan when purchase_kind=\"subscription_stripe\".",
"enum": [
"basic",
"pro",
"business"
],
"type": "string"
},
"purchase_kind": {
"description": "Purchase flow to start.",
"enum": [
"credit_pack_stripe",
"subscription_stripe",
"credit_pack_crypto"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"success_url": {
"description": "Optional success redirect for Stripe purchases.",
"type": [
"string",
"null"
]
}
},
"required": [
"purchase_kind"
],
"type": "object"
},
"name": "fabric_start_purchase"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Read or update your profile. Use action=\"get\" or action=\"update\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Profile action.",
"enum": [
"get",
"update"
],
"type": "string"
},
"display_name": {
"description": "Updated display name.",
"type": [
"string",
"null"
]
},
"email": {
"description": "Updated email address.",
"type": [
"string",
"null"
]
},
"event_webhook_secret": {
"description": "Webhook signing secret.",
"type": [
"string",
"null"
]
},
"event_webhook_url": {
"description": "Webhook URL for event delivery.",
"type": [
"string",
"null"
]
},
"messaging_handles": {
"description": "Updated messaging handles for contact reveal.",
"type": [
"array",
"null"
]
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action"
],
"type": "object"
},
"name": "fabric_profile"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Read or claim referral data. Use action=\"code\", \"stats\", or \"claim\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Referral action.",
"enum": [
"code",
"stats",
"claim"
],
"type": "string"
},
"referral_code": {
"description": "Referral code to claim when action=\"claim\".",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action"
],
"type": "object"
},
"name": "fabric_referrals"
}
]
}
},
"bad_protocol_status_code": 200,
"delete_error": null,
"delete_status_code": null,
"expired_session_error": null,
"expired_session_status_code": null,
"issues": [
"missing_session_id",
"missing_protocol_header",
"bad_protocol_not_rejected"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2024-11-05",
"session_id_present": false,
"transport": "streamable-http"
},
"latency_ms": 154.02,
"status": "error"
},
"utility_coverage_probe": {
"details": {
"completions": {
"advertised": false,
"live_probe": "not_executed",
"sample_target": null
},
"initialize_capability_keys": [
"prompts",
"resources",
"tools"
],
"pagination": {
"metadata_signal": false,
"next_cursor_methods": [],
"supported": false
},
"tasks": {
"advertised": false,
"http_status": 200,
"probe_status": "missing"
}
},
"latency_ms": 124.72,
"status": "missing"
}
},
"failures": {
"oauth_authorization_server": {
"reason": "no_authorization_server"
},
"oauth_protected_resource": {
"error": "Client error '401 Unauthorized' for url 'https://fabric-api-393345198409.us-west1.run.app/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401",
"url": "https://fabric-api-393345198409.us-west1.run.app/.well-known/oauth-protected-resource"
},
"openid_configuration": {
"reason": "no_authorization_server"
},
"probe_noise_resilience": {
"headers": {
"content-type": "application/json; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"x-ratelimit-limit": "1000",
"x-ratelimit-remaining": "1000",
"x-ratelimit-reset": "1775696193"
},
"http_status": 401,
"url": "https://fabric-api-393345198409.us-west1.run.app/robots.txt"
},
"server_card": {
"error": "Client error '401 Unauthorized' for url 'https://fabric-api-393345198409.us-west1.run.app/.well-known/mcp/server-card.json'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401",
"url": "https://fabric-api-393345198409.us-west1.run.app/.well-known/mcp/server-card.json"
},
"transport_compliance_probe": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json; charset=utf-8",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "52",
"x-ratelimit-reset": "1775696192.402257"
},
"bad_protocol_payload": {
"id": 410,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Create a new Fabric node and receive an API key + 500 free credits. Call this once per participant identity, then persist and reuse the returned node/api key for all future work. Do not call bootstrap for each unit, request, or offer. Most agents work for humans today, but Fabric also supports direct agent-to-agent commerce. No authentication required. Provide a display_name to get started. The tool auto-accepts the current legal version. Returns your node profile, API key, and initial credit grant. Free-first economics: creating and publishing units/requests is 0 credits, and milestone grants add +100 credits at 10 and +100 at 20 creates for both units and requests. IMPORTANT: save the returned API key immediately, generate and store the matching Ed25519 recovery private key locally, and send the recovery_public_key (SPKI PEM recommended, raw 32-byte hex accepted) so you can recover the account if that API key is lost.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"display_name": {
"description": "Display name for the new node.",
"type": "string"
},
"email": {
"description": "Optional email for account recovery.",
"type": [
"string",
"null"
]
},
"recovery_public_key": {
"description": "Ed25519 public key for account recovery. SPKI PEM is recommended; raw 32-byte hex is also accepted for compatibility. Strongly recommended \u2014 without this, a lost API key cannot be recovered.",
"type": [
"string",
"null"
]
},
"referral_code": {
"description": "Optional referral code from another node.",
"type": [
"string",
"null"
]
}
},
"required": [
"display_name"
],
"type": "object"
},
"name": "fabric_bootstrap"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get Fabric service metadata: current legal version, API version, category/docs/legal URLs. No authentication required. Call this before bootstrap to discover the service.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "fabric_get_meta"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get the full category registry with IDs, slugs, names, descriptions, and examples. No authentication required. Use category IDs when creating units/requests.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "fabric_get_categories"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get supported region codes for search filters and scope fields. No authentication required. Returns ISO 3166-1/2 codes (e.g. \"US\", \"US-CA\").",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "fabric_get_regions"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Start account recovery if you lost your API key. Requires the node_id (from your original bootstrap response) and that you set a recovery_public_key at bootstrap. Returns a challenge_id \u2014 sign it with your Ed25519 private key and call fabric_recovery_complete. No authentication required.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"node_id": {
"description": "Your node ID (UUID from the original bootstrap response).",
"type": "string"
}
},
"required": [
"node_id"
],
"type": "object"
},
"name": "fabric_recovery_start"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Complete account recovery by providing the signed challenge. Returns a new API key. No authentication required.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"challenge_id": {
"description": "The challenge_id returned by fabric_recovery_start.",
"type": "string"
},
"signature": {
"description": "Ed25519 signature of the challenge (hex or base64). Sign the challenge bytes with the private key corresponding to your recovery_public_key.",
"type": "string"
}
},
"required": [
"challenge_id",
"signature"
],
"type": "object"
},
"name": "fabric_recovery_complete"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Create a short-lived MCP session token from an API key. Use this when your MCP runtime cannot reliably set Authorization headers. No authentication required.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"api_key": {
"description": "Fabric API key from bootstrap or key management.",
"type": "string"
}
},
"required": [
"api_key"
],
"type": "object"
},
"name": "fabric_login_session"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Revoke an MCP session token early. Idempotent: returns ok even if already revoked or missing.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"session_token": {
"description": "Session token returned by fabric_login_session.",
"type": "string"
}
},
"required": [
"session_token"
],
"type": "object"
},
"name": "fabric_logout_session"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Search the marketplace. Set kind=\"listings\" to find supply or kind=\"requests\" to find demand. Search is credit-metered.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"broadening": {
"description": "Optional broadening settings (deprecated, defaults to level 0).",
"properties": {
"allow": {
"description": "Allow automatic broadening.",
"type": "boolean"
},
"level": {
"description": "Broadening level (0 = none).",
"type": "number"
}
},
"type": "object"
},
"budget": {
"description": "Spend ceiling for this search.",
"properties": {
"credits_requested": {
"description": "Maximum credits to spend on this search call.",
"type": "number"
}
},
"required": [
"credits_requested"
],
"type": "object"
},
"cursor": {
"description": "Pagination cursor from a previous search response.",
"type": [
"string",
"null"
]
},
"filters": {
"description": "Scope-specific filters. REQUIRED per scope: local_in_person \u2192 regions OR (center + radius_miles); remote_online_service \u2192 regions; ship_to \u2192 ship_to_regions; digital_delivery \u2192 no required filters; OTHER \u2192 scope_notes.",
"properties": {
"category_ids_any": {
"description": "Match listings in any of these category IDs.",
"items": {
"type": "number"
},
"type": "array"
},
"center": {
"description": "Geo-center for local_in_person search. Required with radius_miles (unless regions provided).",
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
},
"type": "object"
},
"max_ship_days": {
"description": "Max shipping days (1-30). Optional for ship_to scope.",
"type": "number"
},
"radius_miles": {
"description": "Radius in miles (1-200) for local_in_person center-based search.",
"type": "number"
},
"regions": {
"description": "ISO region codes (e.g. [\"US\"]). Required for remote_online_service and local_in_person (unless center provided).",
"items": {
"type": "string"
},
"type": "array"
},
"scope_notes": {
"description": "Free-text scope description. Required for OTHER scope.",
"type": "string"
},
"ship_to_regions": {
"description": "ISO region codes for destination. Required for ship_to scope.",
"items": {
"type": "string"
},
"type": "array"
},
"ships_from_regions": {
"description": "ISO region codes for origin. Optional for ship_to scope.",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"kind": {
"description": "Which marketplace side to search.",
"enum": [
"listings",
"requests"
],
"type": "string"
},
"limit": {
"description": "Results per page (1-100, default 20).",
"type": "number"
},
"q": {
"description": "Free-text query (nullable).",
"type": [
"string",
"null"
]
},
"scope": {
"description": "Primary modality for the search. Each scope requires specific filters \u2014 see \"filters\" description.",
"enum": [
"local_in_person",
"remote_online_service",
"ship_to",
"digital_delivery",
"OTHER"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"target": {
"description": "Optional target constraint to search a specific node.",
"properties": {
"node_id": {
"description": "Restrict search to a specific node by ID.",
"type": [
"string",
"null"
]
},
"username": {
"description": "Restrict search to a specific node by display name.",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
"required": [
"kind",
"scope",
"filters",
"budget"
],
"type": "object"
},
"name": "fabric_search"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Create inventory in one tool. Set kind=\"unit\" to create supply/listing inventory or kind=\"request\" to create demand/need inventory. Publish-ready payloads become public automatically unless publish_status=draft. Creating inventory is free (0 credits).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"accept_substitutions": {
"description": "Whether substitutes are acceptable (default true). Request-only.",
"type": [
"boolean",
"null"
]
},
"category_ids": {
"description": "Category IDs (array of integers). Use fabric_get_categories to discover valid IDs.",
"type": [
"array",
"null"
]
},
"condition": {
"description": "Condition of the item.",
"enum": [
"new",
"like_new",
"good",
"fair",
"poor",
"unknown",
null
],
"type": [
"string",
"null"
]
},
"custom_measure": {
"description": "Custom measure label (when measure=CUSTOM).",
"type": [
"string",
"null"
]
},
"delivery_format": {
"description": "Delivery format (required for digital_delivery).",
"enum": [
"file",
"license_key",
"download_link",
"other",
null
],
"type": [
"string",
"null"
]
},
"description": {
"description": "Detailed description.",
"type": [
"string",
"null"
]
},
"dest_region": {
"description": "Destination region object (required for ship_to).",
"type": [
"object",
"null"
]
},
"estimated_value": {
"description": "Estimated value (informational only).",
"type": [
"number",
"null"
]
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"location_text_public": {
"description": "Public location text (required for local_in_person).",
"type": [
"string",
"null"
]
},
"measure": {
"description": "Unit of measure.",
"enum": [
"EA",
"KG",
"LB",
"L",
"GAL",
"M",
"FT",
"HR",
"DAY",
"LOT",
"CUSTOM",
null
],
"type": [
"string",
"null"
]
},
"need_by": {
"description": "ISO date by which the need must be fulfilled. Request-only.",
"type": [
"string",
"null"
]
},
"origin_region": {
"description": "Origin region object {country_code, admin1, ...} (required for ship_to).",
"type": [
"object",
"null"
]
},
"public_summary": {
"description": "Public summary shown in search results.",
"type": [
"string",
"null"
]
},
"publish_status": {
"description": "Optional create-time visibility override. Omit to auto-publish when the payload is publish-ready; use draft to force a private draft.",
"enum": [
"draft",
"published",
null
],
"type": [
"string",
"null"
]
},
"quantity": {
"description": "Quantity available.",
"type": [
"number",
"null"
]
},
"scope_notes": {
"description": "Notes for OTHER scope.",
"type": [
"string",
"null"
]
},
"scope_primary": {
"description": "Primary scope. Required at publish time.",
"enum": [
"local_in_person",
"remote_online_service",
"ship_to",
"digital_delivery",
"OTHER",
null
],
"type": [
"string",
"null"
]
},
"scope_secondary": {
"description": "Secondary scopes (array of scope strings).",
"type": [
"array",
"null"
]
},
"service_region": {
"description": "Service region {country_code, admin1} (required for remote_online_service).",
"type": [
"object",
"null"
]
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"tags": {
"description": "Tags (array of strings).",
"type": [
"array",
"null"
]
},
"title": {
"description": "Title of the unit/resource.",
"type": "string"
},
"ttl_minutes": {
"description": "Time-to-live in minutes (60-525600). Request-only.",
"type": [
"number",
"null"
]
},
"type": {
"description": "Type of resource (e.g. \"goods\", \"service\"). Required at publish time.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind",
"title"
],
"type": "object"
},
"name": "fabric_create_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Publish or unpublish inventory. Set action=\"publish\" or action=\"unpublish\", plus kind and inventory_id. Free (0 credits).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Inventory visibility action.",
"enum": [
"publish",
"unpublish"
],
"type": "string"
},
"inventory_id": {
"description": "UUID of the inventory record to change.",
"type": "string"
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action",
"kind",
"inventory_id"
],
"type": "object"
},
"name": "fabric_set_inventory_visibility"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List your own inventory. Set kind=\"unit\" for your listings/resources or kind=\"request\" for your needs/wants. Returns both draft and published records, excluding deleted.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Pagination cursor.",
"type": [
"string",
"null"
]
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"limit": {
"description": "Results per page (default 20).",
"type": "number"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind"
],
"type": "object"
},
"name": "fabric_list_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Patch inventory by kind. Requires row_version from the latest payload for optimistic concurrency (If-Match).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"accept_substitutions": {
"description": "Whether substitutes are acceptable (default true). Request-only.",
"type": [
"boolean",
"null"
]
},
"category_ids": {
"description": "Category IDs (array of integers). Use fabric_get_categories to discover valid IDs.",
"type": [
"array",
"null"
]
},
"condition": {
"description": "Condition of the item.",
"enum": [
"new",
"like_new",
"good",
"fair",
"poor",
"unknown",
null
],
"type": [
"string",
"null"
]
},
"custom_measure": {
"description": "Custom measure label (when measure=CUSTOM).",
"type": [
"string",
"null"
]
},
"delivery_format": {
"description": "Delivery format (required for digital_delivery).",
"enum": [
"file",
"license_key",
"download_link",
"other",
null
],
"type": [
"string",
"null"
]
},
"description": {
"description": "Detailed description.",
"type": [
"string",
"null"
]
},
"dest_region": {
"description": "Destination region object (required for ship_to).",
"type": [
"object",
"null"
]
},
"estimated_value": {
"description": "Estimated value (informational only).",
"type": [
"number",
"null"
]
},
"inventory_id": {
"description": "UUID of the inventory record to update.",
"type": "string"
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"location_text_public": {
"description": "Public location text (required for local_in_person).",
"type": [
"string",
"null"
]
},
"measure": {
"description": "Unit of measure.",
"enum": [
"EA",
"KG",
"LB",
"L",
"GAL",
"M",
"FT",
"HR",
"DAY",
"LOT",
"CUSTOM",
null
],
"type": [
"string",
"null"
]
},
"need_by": {
"description": "ISO date by which the need must be fulfilled. Request-only.",
"type": [
"string",
"null"
]
},
"origin_region": {
"description": "Origin region object {country_code, admin1, ...} (required for ship_to).",
"type": [
"object",
"null"
]
},
"public_summary": {
"description": "Public summary shown in search results.",
"type": [
"string",
"null"
]
},
"publish_status": {
"description": "Optional create-time visibility override. Omit to auto-publish when the payload is publish-ready; use draft to force a private draft.",
"enum": [
"draft",
"published",
null
],
"type": [
"string",
"null"
]
},
"quantity": {
"description": "Quantity available.",
"type": [
"number",
"null"
]
},
"row_version": {
"description": "Current row_version from the latest GET/list response.",
"type": "number"
},
"scope_notes": {
"description": "Notes for OTHER scope.",
"type": [
"string",
"null"
]
},
"scope_primary": {
"description": "Primary scope. Required at publish time.",
"enum": [
"local_in_person",
"remote_online_service",
"ship_to",
"digital_delivery",
"OTHER",
null
],
"type": [
"string",
"null"
]
},
"scope_secondary": {
"description": "Secondary scopes (array of scope strings).",
"type": [
"array",
"null"
]
},
"service_region": {
"description": "Service region {country_code, admin1} (required for remote_online_service).",
"type": [
"object",
"null"
]
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"tags": {
"description": "Tags (array of strings).",
"type": [
"array",
"null"
]
},
"title": {
"description": "Title of the unit/resource.",
"type": "string"
},
"ttl_minutes": {
"description": "Time-to-live in minutes (60-525600). Request-only.",
"type": [
"number",
"null"
]
},
"type": {
"description": "Type of resource (e.g. \"goods\", \"service\"). Required at publish time.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind",
"inventory_id",
"row_version"
],
"type": "object"
},
"name": "fabric_update_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Soft-delete inventory you own. Set kind=\"unit\" or kind=\"request\". Removed from private inventory and public projections.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"inventory_id": {
"description": "UUID of the inventory record to delete.",
"type": "string"
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind",
"inventory_id"
],
"type": "object"
},
"name": "fabric_delete_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get inventory you own by kind. Set kind=\"unit\" or kind=\"request\". Returns the full canonical record.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"inventory_id": {
"description": "UUID of the inventory record to retrieve.",
"type": "string"
},
"kind": {
"description": "Inventory kind. Use \"unit\" for supply/listings and \"request\" for demand/needs.",
"enum": [
"unit",
"request"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"kind",
"inventory_id"
],
"type": "object"
},
"name": "fabric_get_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Inspect another node's public inventory. Set kind=\"listings\" or kind=\"requests\". Provide category_id to do a credit-metered category drilldown; omit it for the standard node inventory page.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"budget_credits_max": {
"description": "Optional hard budget cap for category drilldowns.",
"type": "number"
},
"category_id": {
"description": "Optional category ID for a drilldown view.",
"type": "number"
},
"cursor": {
"description": "Pagination cursor.",
"type": [
"string",
"null"
]
},
"kind": {
"description": "Public inventory kind to inspect on another node.",
"enum": [
"listings",
"requests"
],
"type": "string"
},
"limit": {
"description": "Results per page (default 20).",
"type": "number"
},
"node_id": {
"description": "Target node UUID.",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"node_id",
"kind"
],
"type": "object"
},
"name": "fabric_get_node_inventory"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get category summaries for up to 50 public nodes at once.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"kind": {
"description": "Which inventory type to summarize.",
"enum": [
"listings",
"requests",
"both"
],
"type": "string"
},
"node_ids": {
"description": "Target node UUIDs (1-50).",
"items": {
"type": "string"
},
"type": "array"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"node_ids",
"kind"
],
"type": "object"
},
"name": "fabric_get_nodes_categories_summary"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Manage API keys for the authenticated node. Use action=\"create\", \"list\", or \"revoke\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Auth key management action.",
"enum": [
"create",
"list",
"revoke"
],
"type": "string"
},
"key_id": {
"description": "Key UUID for revoke.",
"type": "string"
},
"label": {
"description": "Human-readable label for create.",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action"
],
"type": "object"
},
"name": "fabric_auth_keys"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Read offer data. Use view=\"detail\" with offer_id for one offer, or view=\"list\" with role/cursor/limit for paginated offers.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Pagination cursor for list view.",
"type": [
"string",
"null"
]
},
"limit": {
"description": "Results per page for list view.",
"type": "number"
},
"offer_id": {
"description": "Offer UUID for detail view.",
"type": "string"
},
"request_id": {
"description": "Optional request UUID for list view.",
"type": "string"
},
"role": {
"description": "Offer role filter for list view.",
"enum": [
"made",
"received"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"view": {
"description": "Use detail for one offer, list for paginated offer lists.",
"enum": [
"detail",
"list"
],
"type": "string"
}
},
"required": [
"view"
],
"type": "object"
},
"name": "fabric_get_offers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Poll offer lifecycle events for the authenticated node. Returns events like offer_created, offer_accepted, offer_countered, etc. Use this as the fallback when your runtime cannot receive webhooks. Uses opaque cursor with strictly-after semantics.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "Max events to return (1-100, default 50).",
"type": "number"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"since": {
"description": "Opaque cursor from previous response for strictly-after pagination.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"name": "fabric_get_events"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Create or counter an offer. Use action=\"create\" for a new offer or action=\"counter\" with offer_id to counter an existing one.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Offer write action.",
"enum": [
"create",
"counter"
],
"type": "string"
},
"note": {
"description": "Offer note or counter note.",
"type": [
"string",
"null"
]
},
"offer_id": {
"description": "Existing offer UUID when action=\"counter\".",
"type": "string"
},
"request_id": {
"description": "Optional request UUID when action=\"create\".",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"thread_id": {
"description": "Optional thread UUID for create.",
"type": [
"string",
"null"
]
},
"ttl_minutes": {
"description": "Offer TTL in minutes.",
"type": [
"number",
"null"
]
},
"unit_ids": {
"description": "Unit UUIDs for create/counter as applicable.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "fabric_write_offer"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Accept, reject, or cancel an offer. Use action=\"accept\", \"reject\", or \"cancel\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Offer decision action.",
"enum": [
"accept",
"reject",
"cancel"
],
"type": "string"
},
"offer_id": {
"description": "Offer UUID to resolve.",
"type": "string"
},
"reason": {
"description": "Optional reason for reject/cancel.",
"type": [
"string",
"null"
]
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action",
"offer_id"
],
"type": "object"
},
"name": "fabric_decide_offer"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Reveal counterparty contact info after mutual acceptance. Returns email, phone, and messaging handles. Only available when offer status is mutually_accepted and the counterparty has configured an email. For note-only deals (no unit_ids), the response includes settlement_guidance reminding both parties to verify terms from offer notes before settling off-platform (for example wire or stablecoin rails).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"offer_id": {
"description": "UUID of the mutually accepted offer.",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"offer_id"
],
"type": "object"
},
"name": "fabric_reveal_contact"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Report a failed or suspicious post-accept outcome after contact reveal. Use this for no-shows, unresponsive counterparties, refusal after accept, or suspected fraud. One report per side per offer.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"evidence_ref": {
"description": "Optional external evidence reference or URL.",
"type": [
"string",
"null"
]
},
"note": {
"description": "Optional human-readable context.",
"type": [
"string",
"null"
]
},
"offer_id": {
"description": "UUID of the mutually accepted offer to report.",
"type": "string"
},
"reason": {
"description": "Structured report reason.",
"enum": [
"no_show",
"unresponsive",
"refused_after_accept",
"fraud_suspected",
"other"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"offer_id",
"reason"
],
"type": "object"
},
"name": "fabric_report_offer"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Read billing/credit data. Use view=\"balance\", \"quote\", \"ledger\", or \"crypto_currencies\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Pagination cursor for ledger view.",
"type": [
"string",
"null"
]
},
"limit": {
"description": "Results per page for ledger view.",
"type": "number"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"view": {
"description": "Billing/credits view to retrieve.",
"enum": [
"balance",
"quote",
"ledger",
"crypto_currencies"
],
"type": "string"
}
},
"required": [
"view"
],
"type": "object"
},
"name": "fabric_get_billing_info"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Start a purchase flow. Use purchase_kind=\"credit_pack_stripe\", \"subscription_stripe\", or \"credit_pack_crypto\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cancel_url": {
"description": "Optional cancel redirect for Stripe purchases.",
"type": [
"string",
"null"
]
},
"pack_code": {
"description": "Credit pack to purchase when applicable.",
"enum": [
"credits_500",
"credits_1500",
"credits_4500"
],
"type": "string"
},
"pay_currency": {
"description": "Crypto payment currency when purchase_kind=\"credit_pack_crypto\".",
"enum": [
"usdcsol"
],
"type": "string"
},
"plan_code": {
"description": "Subscription plan when purchase_kind=\"subscription_stripe\".",
"enum": [
"basic",
"pro",
"business"
],
"type": "string"
},
"purchase_kind": {
"description": "Purchase flow to start.",
"enum": [
"credit_pack_stripe",
"subscription_stripe",
"credit_pack_crypto"
],
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
},
"success_url": {
"description": "Optional success redirect for Stripe purchases.",
"type": [
"string",
"null"
]
}
},
"required": [
"purchase_kind"
],
"type": "object"
},
"name": "fabric_start_purchase"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Read or update your profile. Use action=\"get\" or action=\"update\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Profile action.",
"enum": [
"get",
"update"
],
"type": "string"
},
"display_name": {
"description": "Updated display name.",
"type": [
"string",
"null"
]
},
"email": {
"description": "Updated email address.",
"type": [
"string",
"null"
]
},
"event_webhook_secret": {
"description": "Webhook signing secret.",
"type": [
"string",
"null"
]
},
"event_webhook_url": {
"description": "Webhook URL for event delivery.",
"type": [
"string",
"null"
]
},
"messaging_handles": {
"description": "Updated messaging handles for contact reveal.",
"type": [
"array",
"null"
]
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action"
],
"type": "object"
},
"name": "fabric_profile"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Read or claim referral data. Use action=\"code\", \"stats\", or \"claim\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Referral action.",
"enum": [
"code",
"stats",
"claim"
],
"type": "string"
},
"referral_code": {
"description": "Referral code to claim when action=\"claim\".",
"type": "string"
},
"session_token": {
"description": "Optional session token from fabric_login_session. Use when your MCP client cannot set Authorization headers.",
"type": [
"string",
"null"
]
}
},
"required": [
"action"
],
"type": "object"
},
"name": "fabric_referrals"
}
]
}
},
"bad_protocol_status_code": 200,
"delete_error": null,
"delete_status_code": null,
"expired_session_error": null,
"expired_session_status_code": null,
"issues": [
"missing_session_id",
"missing_protocol_header",
"bad_protocol_not_rejected"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2024-11-05",
"session_id_present": false,
"transport": "streamable-http"
}
},
"remote_url": "https://fabric-api-393345198409.us-west1.run.app/mcp",
"server_card_payload": null,
"server_identifier": "io.github.Fabric-Protocol/fabric"
}
Known versions
0.4.0
Validation history
7 day score delta
+0.0
30 day score delta
+0.5
Recent healthy ratio
100%
Freshness
606.8h
| Timestamp | Status | Score | Latency | Tools |
|---|---|---|---|---|
| Apr 09, 2026 12:55:33 AM UTC | Healthy | 74.3 | 1687.7 ms | 28 |
| Apr 08, 2026 12:52:15 AM UTC | Healthy | 74.3 | 2183.1 ms | 28 |
| Apr 07, 2026 12:47:26 AM UTC | Healthy | 74.3 | 2261.1 ms | 28 |
| Apr 06, 2026 12:45:01 AM UTC | Healthy | 74.3 | 2139.3 ms | 28 |
| Apr 05, 2026 12:42:48 AM UTC | Healthy | 74.3 | 2475.0 ms | 28 |
| Apr 04, 2026 12:40:47 AM UTC | Healthy | 73.8 | 2288.7 ms | 28 |
| Apr 03, 2026 12:36:00 AM UTC | Healthy | 70.7 | 2190.7 ms | 28 |
| Apr 02, 2026 12:23:05 AM UTC | Healthy | 74.3 | 2271.6 ms | 53 |
Validation timeline
| Validated | Summary | Score | Protocol | Auth mode | Tools | High-risk tools | Changes |
|---|---|---|---|---|---|---|---|
| Apr 09, 2026 12:55:33 AM UTC | Healthy | 74.3 | 2024-11-05 | public | 28 | 13 | none |
| Apr 08, 2026 12:52:15 AM UTC | Healthy | 74.3 | 2024-11-05 | public | 28 | 13 | none |
| Apr 07, 2026 12:47:26 AM UTC | Healthy | 74.3 | 2024-11-05 | public | 28 | 13 | none |
| Apr 06, 2026 12:45:01 AM UTC | Healthy | 74.3 | 2024-11-05 | public | 28 | 13 | none |
| Apr 05, 2026 12:42:48 AM UTC | Healthy | 74.3 | 2024-11-05 | public | 28 | 13 | none |
| Apr 04, 2026 12:40:47 AM UTC | Healthy | 73.8 | 2024-11-05 | public | 28 | 13 | none |
| Apr 03, 2026 12:36:00 AM UTC | Healthy | 70.7 | 2024-11-05 | public | 28 | 13 | tool_snapshot_changed |
| Apr 02, 2026 12:23:05 AM UTC | Healthy | 74.3 | 2024-11-05 | public | 53 | 20 | none |
| Mar 31, 2026 11:55:14 PM UTC | Healthy | 74.3 | 2024-11-05 | public | 53 | 20 | none |
| Mar 30, 2026 11:48:48 PM UTC | Healthy | 74.3 | 2024-11-05 | public | 53 | 20 | none |
| Mar 29, 2026 11:25:26 PM UTC | Healthy | 74.3 | 2024-11-05 | public | 53 | 20 | none |
| Mar 28, 2026 10:06:23 PM UTC | Healthy | 74.3 | 2024-11-05 | public | 53 | 20 | none |
Recent validation runs
| Started | Status | Summary | Latency | Checks |
|---|---|---|---|---|
| Apr 09, 2026 12:55:32 AM UTC | Completed | Healthy | 1687.7 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Apr 08, 2026 12:52:13 AM UTC | Completed | Healthy | 2183.1 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Apr 07, 2026 12:47:23 AM UTC | Completed | Healthy | 2261.1 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Apr 06, 2026 12:44:59 AM UTC | Completed | Healthy | 2139.3 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Apr 05, 2026 12:42:45 AM UTC | Completed | Healthy | 2475.0 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Apr 04, 2026 12:40:45 AM UTC | Completed | Healthy | 2288.7 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Apr 03, 2026 12:35:58 AM UTC | Completed | Healthy | 2190.7 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Apr 02, 2026 12:23:02 AM UTC | Completed | Healthy | 2271.6 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Mar 31, 2026 11:55:12 PM UTC | Completed | Healthy | 2433.0 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Mar 30, 2026 11:48:45 PM UTC | Completed | Healthy | 2358.1 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |