EcomGraph MCP Server
Connect any MCP-compatible AI agent to the EcomGraph Shopify app catalog. No API key required — the catalog is already public.
Auth & identity
The server is open — no authentication needed. However, you must identify your agent by setting clientInfo.name in your MCP initialize message (e.g. "claude-desktop", "cursor", "my-agent"). Connections without an identity are rejected with a clear error. A per-agent rate limit of 60 requests/minute applies.
Transports
Two transports are available. Use Streamable HTTP for new integrations — it is the current MCP spec (2025-03-26) and required by gateway registries such as Smithery and Glama. The legacy SSE transport remains available for clients that are already pinned to it.
https://api.ecomgraph.com/mcpSingle endpoint — send JSON-RPC via POST /mcp. Session correlation via Mcp-Session-Id header.
https://api.ecomgraph.com/mcp/sseServer stream on GET /mcp/sse, client messages on POST /mcp/messages?sessionId=…. Kept for backwards compatibility.
How to connect
Claude Desktop
Add the following to your claude_desktop_config.json:
{
"mcpServers": {
"ecomgraph": {
"url": "https://api.ecomgraph.com/mcp"
}
}
}Cursor
In Cursor settings → MCP → Add server, enter:
https://api.ecomgraph.com/mcp
Custom agent — Streamable HTTP (TypeScript)
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("https://api.ecomgraph.com/mcp")
);
const client = new Client(
{ name: "my-agent", version: "1.0.0" },
{ capabilities: {} }
);
await client.connect(transport);
const result = await client.callTool("search_apps", { query: "email marketing" });Custom agent — legacy SSE (TypeScript)
Use only if your SDK does not yet support Streamable HTTP.
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
const transport = new SSEClientTransport(
new URL("https://api.ecomgraph.com/mcp/sse")
);
const client = new Client(
{ name: "my-agent", version: "1.0.0" },
{ capabilities: {} }
);
await client.connect(transport);
const result = await client.callTool("search_apps", { query: "email marketing" });Available tools (v1)
All tools are read-only. Every response includes a source_url pointing back to the canonical EcomGraph page.
search_apps(query, category?, limit?)Full-text search across the entire app catalog. Optionally filter by category slug and cap results.
get_app(slug)Retrieve the full app record: name, developer, pricing tiers, rating, review count, Built for Shopify badge, launch date, and FAQ if available.
list_categories()Return the full 3-level taxonomy (parent → child → leaf) with app counts at each level.
list_best_in_category(category_slug, limit?)Top-ranked apps in a category, sorted by rating and review count. Mirrors the /best/{category} pages on the site.
compare_apps(slugs[])Side-by-side comparison of 2–5 apps: pricing, ratings, features, and developer info.
list_developer_apps(developer_slug)All apps published by a developer along with aggregate stats (total reviews, average rating, Built for Shopify count).
LLM-friendly text files
For agents and crawlers that prefer plain text over structured APIs, EcomGraph publishes two files at well-known paths:
/llms.txtA prose briefing (~3 KB): what EcomGraph is, how to construct URLs, and how to connect via MCP. The recommended starting point for any LLM being pointed at this domain.
/llms-full.txtA bulk dump of every app, category, developer, and blog page in stable order with per-page front-matter. Use this for exhaustive ingestion when MCP is unavailable. Refreshed hourly.