{
  "markdown": "# Tulimoa MCP Server\n\nA remote [Model Context Protocol](https://modelcontextprotocol.io) server that lets AI agents discover curated SaaS and AI-agent tools from the [Tulimoa](https://tulimoa.com) directory.\n\n- **Endpoint:** `https://mcp.tulimoa.com/mcp`\n- **Transport:** Streamable HTTP\n- **Auth:** none for the read tools (public data). The write tools (`submit_listing`, `edit_listing`) require an OAuth login via `auth.tulimoa.com` and a `write`-scoped token bound to your Tulimoa account.\n\n## Tools\n\n| Tool | Auth | What it does |\n| --- | --- | --- |\n| `search_listings` | none | Find tools by free-text `query`, `category`, `pricing_model` (free / freemium / paid / lifetime), `mcp` (tool has its own MCP server), `eu_only`, `sort` (new / popular / viewed), `limit`. Returns approved, published listings. |\n| `get_listing` | none | Full detail for one tool by its `slug`. |\n| `list_categories` | none | The category ids and labels used by `search_listings`. |\n| `submit_listing` | write | Create a new directory listing on behalf of the logged-in user (`name`, `url`, `short_description`, `country`, `category`, `mcp`, `pricing_model`, optional `tags`). Created as `pending`; public after admin review. Max 5 / 24h per owner. |\n| `edit_listing` | write | Update fields of a listing you own (by `slug`). Any edit sends it back to review (status `pending`) before it is public again. |\n\n## Connect\n\n**Claude Code**\n```bash\nclaude mcp add --transport http tulimoa https://mcp.tulimoa.com/mcp\n```\n\n**OpenClaw**\n```bash\nopenclaw mcp add tulimoa --url https://mcp.tulimoa.com/mcp --transport streamable-http\n```\n\n**Generic MCP client (`mcp.json`)**\n```json\n{\n  \"servers\": {\n    \"tulimoa\": { \"type\": \"http\", \"url\": \"https://mcp.tulimoa.com/mcp\" }\n  }\n}\n```\n\n## How it works\n\nA single [Cloudflare Worker](https://workers.cloudflare.com) built on the `agents` SDK `createMcpHandler` (stateless Streamable HTTP, no Durable Objects). Reads hit the public Tulimoa catalog with the Supabase anon key, gated by RLS to approved and published listings — authless, since that data is public. Writes resolve a Tulimoa identity per request (either a direct OAuth Bearer, hash-looked-up in `oauth_tokens` and audience-bound to `https://mcp.tulimoa.com/mcp`, or an internally-signed identity header from the Tulimoa gateway) and then insert with an explicit `owner_id`. Hardened with per-colo rate limits and edge caching to protect the backend.\n\nOAuth-capable clients discover the authorization server (`auth.tulimoa.com`) via `GET /.well-known/oauth-protected-resource`.\n\n## Develop\n\n```bash\npnpm install\npnpm dev         # wrangler dev (local)\npnpm typecheck   # tsc --noEmit\npnpm deploy      # wrangler deploy\n```\n\nThe `clawhub-skill/` folder contains the [ClawHub](https://docs.openclaw.ai/clawhub) skill that wraps this server for OpenClaw discovery.\n\n## License\n\n[MIT](./LICENSE)\n",
  "bytes": 2872,
  "sha": "a382a0b2badf083cc9f4ac66435ca5e4fe07a812a599594870748ab735d3b98e",
  "repo_slug": "tulimoa/tulimoa-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_tulimoa_platform_451cf1c1/readme"
}