alexar76 ecosystem MCP gateway — SSRF-hardened web fetch/search + Metis verify (stdio + HTTP)
Five tools with complete input schemas and descriptions. Naming follows verb_noun pattern (web_fetch, web_search, metis_verify, market_search, market_invoke). Descriptions are detailed (150-250 chars) and explain WHAT, WHEN, and WHY. Parameters have types, descriptions, and constraints (enums, min/max). Security hardening is explicit (SSRF guards, sanitization, untrusted marking). Output schemas are documented in descriptions. However, no explicit output schema definitions in code; error handling guidance is minimal; no tool annotations (readOnlyHint/destructiveHint); market_invoke marked WRITE but lacks confirmation/dry-run pattern.
Run one capability from market_search on the hub's free trial tier. Returns the capability's output plus the nonce of the hub-signed receipt, so the result is verifiable against the hub's published key rather than trusted on faith. A few trial invokes are granted per installation; after that the hub answers 402 and this reports that instead of fabricating a result. Paid access needs an on-chain escrow deposit, which is an operator action and deliberately not available here.
Discover paid AI capabilities listed on an AIMarket hub, with prices. Free — no wallet, key or payment channel. Returns capability_id, product_id, price per call in USD and a trust score; pass both ids to market_invoke to run one. The hub lists only capabilities it can actually execute, so an empty result means it genuinely does not sell that. Set AIMARKET_HUB_URL to point at a different hub.
Run Metis cognition + verification on an input; returns answer plus verify_score/verified. Calls the Metis `/v1/verify` API. Response includes machine-readable metadata `[verify_score=… status=… route=… verified=…]` so agents can fail-closed when confidence is insufficient. Configure AIMARKET_METIS_URL and optional AIMARKET_METIS_KEY.
Fetch a web page by URL and return its main text content. SSRF-hardened (scheme allow-list, private-IP block, per-redirect re-validation, size cap). Output is sanitized, role-marker stripped, and wrapped in `<untrusted>…</untrusted>` before it can reach a model — safe for agent consumption with explicit untrusted marking.
market_invoke_tool (WRITE operation) lacks confirmation/dry-run pattern. Destructive capability (runs paid operations on hub) should support confirmation before execution to prevent accidental invocations.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) in tool definitions. market_invoke_tool should be marked destructiveHint=true; web_fetch and web_search should be marked readOnlyHint=true.
Error handling lacks recovery guidance. Descriptions mention SSRF guards and sanitization but do not explain what errors agents should expect or how to recover (e.g., 'If URL is rejected, try a different domain' or 'If trial quota exhausted, contact hub operator').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | <=2025-11-25 | v2 |
Search the web for current facts and return the top result snippets. Uses DuckDuckGo HTML results. Output is sanitized and wrapped `<untrusted>` like web_fetch. Prefer this over guessing when the answer depends on recent events or documentation.
Output schemas not formally documented in code. Descriptions mention response structure (verify_score, capability_id, price, nonce) but no JSON Schema definitions visible for return types. LLMs cannot reliably parse unstructured output.
market_search_tool returns up to 25 results but no pagination guidance. If hub returns 25 items, agent cannot fetch next page. Should document limit behavior and offer offset/cursor for continuation.