Add Founder.best to Claude, ChatGPT, Cursor, Claude Code, VS Code or your own MCP client. Hosted, stateless, nothing to run locally.
https://www.founder.best/api/mcpNo trailing slash, no OAuth.
Use the URL exactly as shown. The server does not require an authorization step, so clients that offer an “authenticate” button (Claude.ai connectors, ChatGPT developer mode) will connect straight away.
claude mcp add --transport http founder-best https://www.founder.best/api/mcp| Client | How to add it |
|---|---|
| Claude Code | Run the claude mcp add command above. Add --scope user to make it available in every project. Check with claude mcp list. |
| Claude.ai (web / desktop) | Settings → Connectors → Add custom connector. Paste the URL, leave the OAuth fields empty, save. Enable it per conversation from the tools menu. |
| ChatGPT | Settings → Connectors (developer mode) → Create. Name it, paste the URL, choose No authentication. The tools appear when the connector is enabled in a chat. |
| Cursor | Project-level in .cursor/mcp.json or global in ~/.cursor/mcp.json. Cursor reloads the file automatically; toggle the server on in Settings → MCP. |
| VS Code (Copilot agent mode) | .vscode/mcp.json with “type”: “http”. Start the server from the inline “Start” action or the MCP servers view. |
| Windsurf, Zed, others | Any client that supports remote Streamable HTTP servers accepts the generic mcpServers shape. |
Ask the agent to list its tools. You are looking for these seven names:
Then try a request that exercises search:
Search Founder.best for developer tools launched this month and tell me which are open source.Use the official MCP TypeScript client, or speak JSON-RPC over HTTP directly. Both examples call search_products and read the structuredContent field, which every tool returns alongside its Markdown text.
import { Client } from "@modelcontextprotocol/client";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/client/streamableHttp";
const client = new Client({ name: "my-agent", version: "1.0.0" });
await client.connect(new StreamableHTTPClientTransport(new URL("https://www.founder.best/api/mcp")));
const { tools } = await client.listTools();
console.log(tools.map((t) => t.name));
// ["search_products", "get_product", "search_founders", "get_founder",
// "get_launches", "get_trending_products", "search_categories"]
const result = await client.callTool({
name: "search_products",
arguments: { query: "generate social media content", pricing: ["free", "freemium"], limit: 10 },
});
console.log(result.structuredContent); // { total, products: [...] }| Item | Behaviour |
|---|---|
| Transport | Streamable HTTP. POST carries JSON-RPC requests; responses arrive as JSON or a short SSE stream depending on the Accept header your client sends. GET and DELETE are handled for clients that open a listening stream or close a session. |
| Sessions | Stateless. Every request is independent, so the server works behind a CDN and across serverless instances. Clients may still send Mcp-Session-Id; it is ignored. |
| Protocol versions | Both the 2025 and 2026 Streamable HTTP eras are supported from the same endpoint. |
| Instructions | The initialize response includes server instructions describing the recommended tool order and citation rules, so hosts that surface them prime the model automatically. |
| Rate limit | 60 requests per minute per IP, reported in X-RateLimit-* headers. Over the limit you receive HTTP 429 with a JSON-RPC error body and Retry-After. |
| CORS | Access-Control-Allow-Origin: *, with Mcp-Session-Id and Mcp-Protocol-Version exposed, so browser-hosted clients work. |
Make sure the URL ends in /api/mcp with no trailing slash and that the client is configured for a remote HTTP server, not a local command. Some clients cache the tool list; restart the session after adding the server.
MCP tool calls query the database live, so they are never more than a few seconds behind the site. If a product you just edited is missing, it is probably still pending review or waiting for its launch date - both are excluded on purpose.
You crossed 60 calls in a minute from one IP. Wait for Retry-After seconds. If an agent loops on a failing call, fix the arguments (the error text names the invalid field) rather than retrying blindly.