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 this machine's user: a loopback packet with a loopback Host, no forwarding headers, no cross-site browser Origin, and on Linux a socket owned by the user the server runs as. That last check is what refuses a reverse proxy on the same machine whose workers run as their own user: nginx's default proxy_pass sends a loopback Host and no forwarding header. Behind any reverse proxy, set a key anyway: a proxy running as the server's own user, or any proxy on macOS or Windows, still looks local. In the HTTP Docker image (callers arrive from the bridge) every keyless call gets 401: set a key or AIMARKET_MCP_PUBLIC=1
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.3

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.3
File Size Uploaded Provenance
aimarket_mcp-0.6.3.tar.gz 45.9 kB Without provenance Details

Built distribution (wheel)

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

Total release size: 77.2 kB

Release files / aimarket_mcp-0.6.3.tar.gz

Download URL aimarket_mcp-0.6.3.tar.gz
Size 45.9 kB
Tags Source
SHA-256 checksum
How to use checksums
febc5bfa83e1fe80833fc6ed77418b543ece85e617df7d5304f93110e5d349bc
BLAKE2b-256 checksum
How to use checksums
4a2b60580b12270290049da03000dcaaba4b9c42ee0f331f487b88015477da27
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.3-py3-none-any.whl

Download URL aimarket_mcp-0.6.3-py3-none-any.whl
Size 31.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
12e2c24860aef76d5df5017487939ae1aaac8a6bc76c582d3b707d4a90530623
BLAKE2b-256 checksum
How to use checksums
c6c87b6b8bae4a7d8be9b2fd950888514cc9ce95e1048e53a4f6ab52e4a5809a
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.3

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