Skip to main content

aimarket-mcp — ecosystem MCP gateway

CI aimarket-mcp MCP server MCP gateway stdio + HTTP 60 tests passing Test coverage License: MIT

🌐 English · Русский · Español · Français · 中文 · Glossary

🟢 Just want to try the marketplace? Install nothing.

Paste https://modelmarket.dev/mcp into your MCP client and you have market_search and market_invoke against the live hub, with a few free trial invokes per caller and a signed receipt for each — no wallet, no key, no install. → docs/hosted-mcp-endpoint.md

Install this package when you want the other three tools (web_fetch, web_search, metis_verify), or want to point the market tools at a hub of your own.

One MCP gateway. Five hardened tools. Shared by Metis, ARGUS, and the ecosystem.

Transport: stdio (aimarket_mcp/stdio_server.py) for Glama / Claude Desktop / Cursor, built with the official Model Context Protocol Python SDK (mcp, FastMCP). Also ships Streamable-HTTP on :9090 for self-hosted deployments (aimarket-mcp-http, Docker Compose).

Item Location
MCP entrypoint (stdio) aimarket_mcp/stdio_server.py
MCP gateway (HTTP) aimarket_mcp/server.py
Tool handlers + security aimarket_mcp/tools.py, aimarket_mcp/security.py
Glama / Docker (stdio) Dockerfile, glama.json
Self-host HTTP Dockerfile.http, docker-compose.yml

Compatible hosts: Claude Desktop, Cursor, Glama, and any MCP client that supports stdio or Streamable-HTTP.

Tools

Tool What it does Hardening
web_fetch Fetch a URL, return main text (readability-lite) SSRF-guarded; output sanitized + <untrusted>-wrapped
web_search Live DuckDuckGo search → top snippets output sanitized + <untrusted>
metis_verify Metis cognition + verification envelope returns answer + verify_score / verified gate
market_search Discover priced capabilities on an AIMarket hub free; no wallet, key or channel; the hub lists only what it can execute
market_invoke Run one on the hub's free trial tier returns the signed receipt nonce; reports the hub's 402 verbatim when the allowance is spent
market_status Show the free trial invokes and prepaid balance left read-only; the hub's health, this installation's remaining trial in the current window, and the AIMARKET_API_KEY balance when set (never the key)

Example — buy a GAIA Open-Meteo reading

market_search_tool(intent="gaia weather open-meteo")
market_invoke_tool(
  capability_id="gaia.weather.read@v1",
  product_id="gaia.gateway",
  source_hub="https://iot.modelmarket.dev",
  # input JSON with device_id om-wx-01 — see tool schema / hub docs
)

Or the same HTTP the tool wraps:

curl -s -X POST "${AIMARKET_HUB_URL:-https://modelmarket.dev}/ai-market/v2/invoke" \
  -H 'Content-Type: application/json' \
  -H 'X-AIMarket-Sandbox-Visitor: vis_mcp_om_wx' \
  -d '{"capability_id":"gaia.weather.read@v1","product_id":"gaia.gateway",
       "source_hub":"https://iot.modelmarket.dev","input":{"device_id":"om-wx-01"}}'

That is the easy path (trial/sandbox). Proving an external wallet paid on-chain is a separate escrow flow (openChannel → DebitAuthorization → hub debit/settle) — see docs/onchain-journal.md §3l–§3m and gaia/docs/LIVE-RELAYS.md.

Why a gateway (not per-agent tools): generic capabilities are written once; the security core lives in one audited place. Ecosystem-specific capabilities live in their own MCP servers (aimarket-oracle-gateway, aimarket-plugins).

Configure (env)

var meaning
AIMARKET_METIS_URL Metis verify API base (default https://metis.modelmarket.dev)
AIMARKET_METIS_KEY optional bearer for Metis verify
AIMARKET_SEARCH_URL DuckDuckGo HTML endpoint override
AIMARKET_HUB_URL AIMarket hub for market_search / market_invoke (default https://modelmarket.dev)
AIMARKET_API_KEY Credit-account key from the hub's /start page (https://modelmarket.dev/start): priced market_invoke calls are paid from its prepaid balance; while it is short the free trial still applies. In HTTP mode it pays for every caller of that server
AIMARKET_SANDBOX_VISITOR Trial identity for market_invoke; random per install, set it to keep an allowance across reinstalls
AIMARKET_MCP_KEY HTTP only — bearer auth key. Without one the server answers only callers on this machine: a loopback packet with a loopback Host, no forwarding headers, and no cross-site browser Origin. Behind a reverse proxy, or in the HTTP Docker image (callers arrive from the bridge), set a key or AIMARKET_MCP_PUBLIC=1, or every call gets 401
AIMARKET_MCP_PUBLIC HTTP only — 1 answers anonymous callers from anywhere, without a key (an explicit choice for a public endpoint)
AIMARKET_MCP_HOST HTTP only — listen address (default 127.0.0.1; the HTTP image sets 0.0.0.0)
AIMARKET_MCP_PRODUCTION HTTP only — 1 requires AIMARKET_MCP_KEY (fail-closed)
AIMARKET_MCP_RATE HTTP only — requests/min per key/IP (default 120)
AIMARKET_MCP_PORT HTTP only — listen port (default 9090)

Run (stdio — Glama / Claude Desktop)

Claude Desktop (mcpServers entry) — no clone, no working directory to get wrong:

{
  "mcpServers": {
    "aimarket-mcp": {
      "command": "uvx",
      "args": ["aimarket-mcp"]
    }
  }
}

uvx fetches the published package and runs its aimarket-mcp console script, which is the stdio server. With the package already installed, "command": "aimarket-mcp" and no args does the same thing.

From a checkout, for development:

pip install -e .
python -m aimarket_mcp.stdio_server

Run (HTTP — self-host)

pip install -e .
AIMARKET_MCP_KEY=sk-... AIMARKET_MCP_PRODUCTION=1 aimarket-mcp-http   # :9090
# or: docker compose up -d   (uses Dockerfile.http)

Cursor / Claude (Streamable HTTP)

{
  "mcpServers": {
    "aimarket-web": {
      "type": "streamable-http",
      "url": "http://127.0.0.1:9090/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_AIMARKET_MCP_KEY"
      }
    }
  }
}

Publish on Glama

Listing: aimarket-mcp. Glama generates a container from the build settings in its admin panel:

Field Value
Build steps ["bash scripts/glama_install.sh"]
CMD arguments ["mcp-proxy", "--", ".venv/bin/python", "-m", "aimarket_mcp.stdio_server"]
Placeholder parameters {}
Pinned commit SHA empty (latest synced commit)

Build, inspect, and publish a release after syncing source changes. A repository sync alone does not refresh the deployed tool catalog or its quality evaluation. The catalog should contain all six tools listed above. See Glama build and release instructions.

Consumers

  • Connected successfully? Share your host, configuration, and one working tool using the Show and tell template.
  • Metis — enable the preset:
    enable_mcp_tools: true
    mcp_ecosystem_presets: [aimarket-web]
    
  • ARGUS — add the server to argus.config.json mcpServers (see that repo).

Test

pip install -e '.[dev]' && pytest -q

Registries

See the directory submission checklist and current status before submitting or refreshing a listing.

Registry Listing
Glama glama.ai/mcp/servers/alexar76/aimarket-mcp
Official MCP Registry io.github.alexar76/aimarket-mcp — server.json + GitHub Actions
PyPI pip install aimarket-mcp
GitHub Releases github.com/alexar76/aimarket-mcp/releases

Metadata

Release files for aimarket-mcp 0.6.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aimarket-mcp 0.6.2
File Size Uploaded Provenance
aimarket_mcp-0.6.2.tar.gz 43.7 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for aimarket-mcp 0.6.2
File Interpreter ABI Platform
aimarket_mcp-0.6.2-py3-none-any.whl Python 3 none any Details

Total release size: 73.9 kB

Release files / aimarket_mcp-0.6.2.tar.gz

Download URL aimarket_mcp-0.6.2.tar.gz
Size 43.7 kB
Tags Source
SHA-256 checksum
How to use checksums
7e18c6d6e469a39125fd5d4549d435b67e753c801f21e84fdd90a407c0bbc954
BLAKE2b-256 checksum
How to use checksums
42d9f9642e016f4259ff3a296fbb982f73461a7fc6697bd4c4fb86e29ed33c91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / aimarket_mcp-0.6.2-py3-none-any.whl

Download URL aimarket_mcp-0.6.2-py3-none-any.whl
Size 30.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
260cc13c1a7f679193a2a4b2977f335563bb0e780ba2b507058bb1c500fcb2b0
BLAKE2b-256 checksum
How to use checksums
1d591ccf52b269bafbd4b5c582d8792aa7951f0e43937d11d46feca793761551
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Security for aimarket-mcp 0.6.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page