{"id":"ad14c4b8-e64c-4670-8de8-b64bad2f43fd","slug":"mencoro-mcp","kind":"mcp","name":"mencoro-mcp","summary":"Public metadata and stdio bridge for the hosted Mencoro MCP server — brand visibility in AI search for Claude, ChatGPT, Cursor and any MCP client.","owner":"mencoro","repoUrl":"https://github.com/mencoro/mencoro-mcp","license":"MIT","licenseTier":"permissive","trust":"community","stars":0,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-09-15T14:29:35.000Z","addedAt":"2026-10-13T22:08:21.344Z","logoUrl":"https://avatars.githubusercontent.com/u/259855951?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["cloud-infra","search","design-media"],"tags":["ai-search","ai-visibility","brand-monitoring","generative-engine-optimization","geo","share-of-voice","streamable-http"],"runtime":"node","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-17T12:16:54.378Z","sample":false,"url":"https://conduits.dev/tools/mencoro-mcp","language":"TypeScript","transports":["stdio"],"install":{"npm":"@mencoro/mcp"},"requirements":{"env":[{"name":"MENCORO_API_KEY","secret":true,"required":false,"description":"Mencoro personal access token (mcp_pat_...), created at https://tool.mencoro.com/me/mcp-server"},{"name":"MENCORO_MCP_URL","secret":false,"required":false,"description":"Upstream MCP endpoint. Only set this to reach a non-production Mencoro environment."}],"upstreamMayCharge":false},"tools":null,"readme":"<p align=\"center\">\n  <img src=\"assets/mencoro-icon-256.png\" alt=\"Mencoro\" width=\"96\" height=\"96\">\n</p>\n\n<h1 align=\"center\">Mencoro MCP server</h1>\n\n<p align=\"center\">\n  Ask an AI assistant how your brand is doing in AI answers — rank, mentions, sentiment and Share of Voice — and have it set up and tune your monitoring, in plain language.\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@mencoro/mcp\"><img src=\"https://img.shields.io/npm/v/%40mencoro%2Fmcp?logo=npm&logoColor=white&label=npm&color=cb3837\" alt=\"npm version\"></a>\n  <a href=\"https://registry.modelcontextprotocol.io/?search=com.mencoro%2Fmencoro\"><img src=\"https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fregistry.modelcontextprotocol.io%2Fv0%2Fservers%2Fcom.mencoro%252Fmencoro%2Fversions%2Flatest&query=%24.server.version&prefix=v&logo=modelcontextprotocol&logoColor=white&label=MCP%20registry&color=0b7285\" alt=\"MCP registry\"></a>\n  <a href=\"https://github.com/mencoro/mencoro-mcp/pkgs/container/mencoro-mcp\"><img src=\"https://img.shields.io/badge/ghcr.io-mencoro%2Fmencoro--mcp-2496ed?logo=docker&logoColor=white\" alt=\"GitHub Container Registry\"></a>\n  <a href=\"https://glama.ai/mcp/connectors/com.mencoro/mencoro\"><img src=\"https://glama.ai/mcp/connectors/com.mencoro/mencoro/badges/score.svg\" alt=\"Glama connector score\"></a>\n  <a href=\"https://github.com/mencoro/mencoro-mcp/actions/workflows/ci.yml\"><img src=\"https://github.com/mencoro/mencoro-mcp/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-blue\" alt=\"MIT licence\"></a>\n</p>\n\n---\n\nMencoro tracks how brands surface in AI answer engines — ChatGPT, Perplexity, Google AI Overview\nand AI Mode — and in Google Search and Shopping. The MCP server exposes that data to any MCP client,\nand lets it manage projects, tracked queries, clusters and organizations, as **66 tools** (31 that\nread, 35 that change something) and **20 prompts**. One of them, `get_mencoro_guide`, answers\nquestions about Mencoro itself and works without signing in.\n\nThe server is **hosted**. Most clients should connect to it directly:\n\n```\nhttps://api.mencoro.com/mcp\n```\n\nThis repository holds the public metadata for that server plus a small stdio bridge\n(`@mencoro/mcp`) for hosts that can only launch a local process. It does **not** contain the\nMencoro application source.\n\n## Connect\n\n### Clients that speak remote MCP (recommended)\n\nNo install, no local process. Sign in with OAuth, or paste a personal access token as a header.\n\n| Client | How |\n|---|---|\n| **Claude** (web, Desktop, mobile) | Settings → Connectors → *Add custom connector* → paste the URL → **Sign in**. Or use the [one-click link](https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Mencoro&connectorUrl=https%3A%2F%2Fapi.mencoro.com%2Fmcp). |\n| **ChatGPT** | Settings → *Apps & Connectors* → developer mode → add the URL → sign in. |\n| **Claude Code** | `claude mcp add --transport http mencoro https://api.mencoro.com/mcp` then `/mcp` to sign in |\n| **Cursor** | [config below](#client-configuration) |\n| **VS Code** | [config below](#client-configuration) |\n| **OpenAI Codex** | [config below](#client-configuration) |\n| **Gemini CLI** | [config below](#client-configuration) |\n| **OpenCode** | [config below](#client-configuration) |\n| **Google Antigravity** | [config below](#client-configuration) |\n\n### Clients that can only spawn a local process\n\nClaude Desktop's manual configuration, and older stdio-only hosts, need a bridge. That is what\nthis package is:\n\n```bash\nnpx -y @mencoro/mcp\n```\n\n```jsonc\n// claude_desktop_config.json\n{\n  \"mcpServers\": {\n    \"mencoro\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@mencoro/mcp\"],\n      \"env\": { \"MENCORO_API_KEY\": \"mcp_pat_your_token\" }\n    }\n  }\n}\n```\n\nThe token goes through the environment rather than an argument, so it does not appear in `ps`\noutput and does not have to survive the host's argument splitting.\n\n## Authentication\n\nTwo ways in. Both carry the same three permissions, and neither can ever do more than your own\nrole in an organization allows:\n\n| Scope | Allows |\n|---|---|\n| `read` | Every read tool. Always granted. |\n| `write` | Creating, changing and deleting projects, competitors, clusters and tracked queries; running checks; starting discovery jobs. |\n| `organization:manage` | Creating, renaming, archiving and restoring organizations; invitations; members' roles and suspension. |\n\n**OAuth 2.1** — the one-click path. Supported by Claude, ChatGPT, Claude Code and any client that\nimplements the MCP authorization spec. Nothing to copy or paste; revoke it from the app.\nThe consent screen pre-selects the scopes the client asked for (all three when it asked for none),\nand you can untick any but `read`.\nThe server advertises PKCE (`S256`), Client ID Metadata Documents, Dynamic Client Registration and\nRFC 9728 resource metadata, so clients discover everything they need from\n`https://api.mencoro.com/.well-known/oauth-protected-resource/mcp`. Calling a tool the connection\nlacks the scope for answers `403 insufficient_scope` naming the scopes to request, so a client\nthat supports step-up authorization asks you to reconnect with the extra permission.\n\n**Personal access token** — for CLI clients, config files, and this bridge. Create one at\n[tool.mencoro.com/me/mcp-server](https://tool.mencoro.com/me/mcp-server); it is shown once, starts\nwith `mcp_pat_`, carries the permissions you tick (all three by default), and can be pinned to a\nsingle organization and given an expiry. Send it as `Authorization: Bearer mcp_pat_…`. A call the\ntoken lacks the permission for fails with a tool error naming it; a token cannot be upgraded, so\ncreate a new one to add a permission.\n\nConnections and tokens created before write access existed have `read` and `write` but not\n`organization:manage`.\n\n> ChatGPT cannot send a custom `Authorization` header to a remote connector — use OAuth there.\n\n## Client configuration\n\n<details>\n<summary><b>Cursor</b> — <code>~/.cursor/mcp.json</code></summary>\n\n```json\n{\n  \"mcpServers\": {\n    \"mencoro\": {\n      \"url\": \"https://api.mencoro.com/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer mcp_pat_your_token\" }\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>VS Code</b> — <code>.vscode/mcp.json</code></summary>\n\n```json\n{\n  \"servers\": {\n    \"mencoro\": {\n      \"type\": \"http\",\n      \"url\": \"https://api.mencoro.com/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer mcp_pat_your_token\" }\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>OpenAI Codex</b> — <code>~/.codex/config.toml</code></summary>\n\n```toml\n[mcp_servers.mencoro]\nurl = \"https://api.mencoro.com/mcp\"\nhttp_headers = { \"Authorization\" = \"Bearer mcp_pat_your_token\" }\n```\n</details>\n\n<details>\n<summary><b>Gemini CLI</b> — <code>~/.gemini/settings.json</code></summary>\n\n```json\n{\n  \"mcpServers\": {\n    \"mencoro\": {\n      \"httpUrl\": \"https://api.mencoro.com/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer mcp_pat_your_token\" }\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>OpenCode</b> — <code>opencode.json</code></summary>\n\n```json\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"mcp\": {\n    \"mencoro\": {\n      \"type\": \"remote\",\n      \"url\": \"https://api.mencoro.com/mcp\",\n      \"enabled\": true,\n      \"headers\": { \"Authorization\": \"Bearer mcp_pat_your_token\" },\n      \"oauth\": false\n    }\n  }\n}\n```\n\n`oauth: false` stops OpenCode negotiating OAuth against an endpoint that also advertises it, which\nwould otherwise override the token you just configured.\n</details>\n\n<details>\n<summary><b>Google Antigravity</b></summary>\n\n```json\n{\n  \"mcpServers\": {\n    \"mencoro\": {\n      \"serverUrl\": \"https://api.mencoro.com/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer mcp_pat_your_token\" }\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>Claude Code</b> — project scope, committed to a repository</summary>\n\n```json\n{\n  \"mcpServers\": {\n    \"mencoro\": {\n      \"type\": \"http\",\n      \"url\": \"https://api.mencoro.com/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer ${MENCORO_API_KEY}\" }\n    }\n  }\n}\n```\n</details>\n\n## Tools\n\n31 tools read and 35 change something. Every tool declares all four MCP annotations\n(`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`) explicitly, so a client can\ndecide what to ask you before calling it.\n\n### Reading\n\nEvery read tool needs only the `read` scope.\n\n| Tool | What it answers |\n|---|---|\n| `list_projects` | The organizations and active projects you can see. **Call this first** — every other tool needs the ids it returns. |\n| `get_project` | One project's status, website domains, brand names and competitors with their ids. |\n| `list_clusters` | A project's keyword clusters, by name, with their ids. |\n| `get_available_filters` | Which engines, countries, keyword clusters and competitors a project actually has. |\n| `get_metric_glossary` | Maps everyday wording (\"visibility\", \"tone\", \"ranking\") onto the right metric and tool. |\n| `get_organization_overview` | Current-state board across every active project in an organization, ranked by Share of Voice. |\n| `get_organization` | An organization's profile, status, your role in it, and its member, project and invitation counts. |\n| `list_members` | An organization's members with their role and state, optionally with pending invitations. Owners only. |\n| `get_usage` | The subscription, tracked-query count and projected monthly checks, against the plan's limits. |\n| `get_project_rank_tracking_stats` | The project summary: positions, trends, Share of Voice per competitor, sentiment split, mention/SERP/shopping rates. |\n| `get_rank_tracking_time_series` | Those metrics over time, bucketed daily, weekly or monthly, optionally per competitor. |\n| `get_tracked_query_time_series` | The same history for one tracked query. |\n| `get_query_movers` | The tracked queries that gained or lost the most versus the previous period. |\n| `get_cluster_breakdown` | The same metrics broken down per keyword cluster. |\n| `search_tracked_queries` | Search and paginate a project's tracked queries with their latest positions. |\n| `get_tracked_query` | One tracked query's settings: text, engine, country, status, frequency, passes, clusters and last check. |\n| `list_keyword_listings` | One row per query text across its engine and country variants, with every metric, sortable. |\n| `get_tracking_coverage` | What is stale: paused, never-checked and overdue tracked queries. |\n| `get_sentiment_breakdown` | Positive / neutral / negative split of your AI mentions, per engine and per competitor. |\n| `get_mention_mix` | Mention counts by type, tone and qualifier — the inputs behind the Share of Voice weighting. |\n| `get_mention_samples` | The raw AI mention texts, paginated and filterable, for qualitative review. |\n| `get_share_of_voice_formula` | The weights and multipliers the Share of Voice score is built from. |\n| `get_competitor_cooccurrence` | Head-to-head: when you and a competitor appear in the same answer, who is named higher. |\n| `get_cited_sources` | The domains and pages the answer engines cited, with counts and average citation rank. |\n| `list_ai_responses` | The captured AI answers themselves: full text, engine, capture time and cited sources. |\n| `list_search_snapshots` | The captured Google Search and Shopping result pages. |\n| `get_tracked_query_matches` | Every mention or ranking behind one tracked query's metrics. |\n| `get_job` | Progress and result of a background job started by a discovery or clustering tool. |\n| `preview_operation` | What a confirmable change would affect and cost, plus the one-time token to run it. |\n| `list_untracked_competitors` | Brands the AI answers name that you do not track yet, most-seen first: the competitors worth adding. |\n| `get_mencoro_guide` | The public Mencoro guide: how checks, mentions and every metric work, plans, reliability, this server, analysis advice, pairing with Ahrefs, Semrush, Search Console or Google Analytics servers. **No credential needed.** |\n\n### Changing things\n\nA tool marked **C** needs a confirmation: call `preview_operation` with the tool's name and\narguments, show the plan to the user, and call the tool with the returned `confirmationToken` only\nafter they agree. The token is single-use, expires after a few minutes, and is refused if anything\nthe plan described has changed. Creating tools, job starters and confirmable tools also accept a\n`requestId`: a retry with the same one returns the first result instead of doing the work twice.\n\n| Tool | Scope | | What it does |\n|---|---|---|---|\n| `create_project` | `write` | | Create a project from brand names and domains. |\n| `update_project` | `write` | | Rename a project, or replace its website domains and brand names. |\n| `archive_project` | `write` | C | Archive a project; its tracked queries stop being checked. |\n| `restore_project` | `write` | | Bring an archived project back. |\n| `create_competitor` | `write` | | Add a competitor to a project. |\n| `update_competitor` | `write` | | Replace a competitor's name, website domains and brand names. |\n| `delete_competitor` | `write` | C | Remove a competitor with every mention and search or shopping result recorded for it. |\n| `create_tracked_queries` | `write` | C | Add tracked queries in bulk across engines and countries; the preview shows the checks they will spend. |\n| `pause_tracked_queries` | `write` | | Pause up to 100 tracked queries; skipped checks are not made up. |\n| `resume_tracked_queries` | `write` | | Resume up to 100 paused tracked queries. |\n| `set_tracked_query_check_frequency` | `write` | | Change how often up to 100 tracked queries are checked. |\n| `set_tracked_query_passes` | `write` | | Change how many answers each check of up to 100 tracked queries captures. |\n| `delete_tracked_queries` | `write` | C | Delete up to 100 tracked queries with their captured answers, matches and history. |\n| `run_checks` | `write` | C | Check tracked queries now, spending budget. |\n| `report_ai_response` | `write` | | Flag a captured AI answer that was analysed wrong. |\n| `create_clusters` | `write` | | Create keyword clusters. |\n| `rename_cluster` | `write` | | Rename a cluster. |\n| `delete_cluster` | `write` | C | Delete a cluster; its tracked queries stay. |\n| `add_tracked_queries_to_clusters` | `write` | | Add tracked queries to clusters. |\n| `remove_tracked_queries_from_clusters` | `write` | | Remove tracked queries from clusters. |\n| `start_auto_clustering` | `write` | | Start a job that proposes a clustering. |\n| `apply_auto_clustering` | `write` | | Apply a proposal the user approved. |\n| `suggest_brand_names` | `write` | | Start a job that suggests brand names for a website. |\n| `discover_brands` | `write` | | Start a job that finds other names a project's brand and its competitors go by. |\n| `discover_keywords` | `write` | | Start a job that proposes search keywords worth tracking. |\n| `discover_prompts` | `write` | | Start a job that proposes AI prompts worth tracking. |\n| `create_organization` | `organization:manage` | C | Create an organization. |\n| `update_organization` | `organization:manage` | C | Change an organization's name, description or contact email. |\n| `archive_organization` | `organization:manage` | C | Archive an organization. |\n| `restore_organization` | `organization:manage` | C | Restore an archived organization. |\n| `invite_member` | `organization:manage` | C | Invite someone by email with a role. |\n| `cancel_invitation` | `organization:manage` | C | Cancel a pending invitation. |\n| `change_member_role` | `organization:manage` | C | Give a member another role. |\n| `suspend_member` | `organization:manage` | C | Suspend a member, taking their access away. |\n| `reactivate_member` | `organization:manage` | C | Give a suspended member their access back. |\n\nA change is refused exactly where the Mencoro app refuses it: your role in the organization, an\narchived project, or a missing subscription where the app requires one.\n\nDates are ISO `YYYY-MM-DD` and must fall inside the retention window. Positions are\n1-based and **lower is better**; every other metric improves as it rises.\n\nThe live definitions — names, descriptions, input and output schemas, annotations — are readable\nwithout a credential at `https://api.mencoro.com/public/v1/mcp`, a discovery-only mount of the same\nserver that answers `initialize`, `ping`, `tools/list`, `prompts/list` and the public guide\n(`get_mencoro_guide`), and refuses everything else. Calling any other tool requires signing in at\n`https://api.mencoro.com/mcp`.\n\n## Prompts\n\nTwenty ready-made starting points, surfaced by clients that support MCP prompts. Twelve ask about\nyour data:\n\n`brand_ai_overview` · `whats_changed` · `organization_overview` · `top_queries` ·\n`biggest_movers` · `query_history` · `competitor_standing` · `head_to_head` ·\n`negative_mentions` · `cited_sources` · `coverage_health` · `sov_explainer`\n\nFour script a change step by step, stopping for your approval where it matters:\n\n| Prompt | Workflow |\n|---|---|\n| `set_up_project` | Start monitoring a brand from its website in a short conversation: one proposal with brand names and suggested competitors before anything is created, then the first prompts to track, then the other brands the answers name. |\n| `expand_query_set` | Find new prompts or keywords worth tracking and add the ones you pick. |\n| `reorganise_clusters` | Let Mencoro propose a clustering, review it, and apply it. |\n| `tune_tracking_costs` | Review what each tracked query costs in checks and change frequency, passes or status to fit the plan. |\n\nFour turn the data into decisions:\n\n| Prompt | Analysis |\n|---|---|\n| `visibility_report` | A structured report for a period against the previous one, ending with recommended actions. |\n| `results_review` | Whether a change (content, PR, a launch) moved visibility, before and after against a baseline. |\n| `optimization_opportunities` | A prioritised list of what to improve: where competitors win, sources to be present on, sentiment and coverage gaps. |\n| `cross_source_analysis` | Mencoro together with the Ahrefs, Semrush, Search Console or Google Analytics servers your assistant has connected. Mencoro has no integration with them; the assistant calls each with your own account. |\n\n## ChatGPT submission and skills\n\n[chatgpt-app-submission.json](chatgpt-app-submission.json) contains the app submission metadata,\ntool annotation justifications, and review test cases. Keep its tool descriptions and justifications\naligned with the hosted server when capabilities change.\n\nTen optional skills turn the tools into reusable workflows. ChatGPT does not surface MCP prompts,\nso these are how its users get the same guided flows.\n\nSix analyse, and change nothing:\n\n- [Visibility report](skills/mencoro-visibility-report/SKILL.md): performance summaries, trends, and query gains or losses.\n- [Competitor analysis](skills/mencoro-competitor-analysis/SKILL.md): share of voice and head-to-head comparisons.\n- [Sentiment review](skills/mencoro-sentiment-review/SKILL.md): sentiment breakdowns with attributed mention excerpts.\n- [Coverage audit](skills/mencoro-coverage-audit/SKILL.md): current monitoring coverage and stale queries.\n- [Results review](skills/mencoro-results-review/SKILL.md): whether a change moved AI visibility, before and after against a baseline.\n- [Optimization insights](skills/mencoro-optimization-insights/SKILL.md): a prioritised list of what to improve, optionally with connected Ahrefs, Semrush, Search Console or Google Analytics tools.\n\nFour make changes, each only after the user approves it, and need the `write` scope:\n\n- [Project setup](skills/mencoro-project-setup/SKILL.md): a monitored project from a website in a short conversation, with brand names and suggested competitors proposed before anything is created.\n- [Query expansion](skills/mencoro-query-expansion/SKILL.md): new prompts or keywords worth tracking, added as the user picks them.\n- [Cluster reorganisation](skills/mencoro-cluster-reorganisation/SKILL.md): a proposed clustering, reviewed and applied.\n- [Cost tuning](skills/mencoro-cost-tuning/SKILL.md): frequency, pass and pause changes that bring check spend within the plan.\n\nIn the submission portal's **Skills** step, upload each skill folder under `skills/`, or a ZIP\ncontaining that folder. Include both `SKILL.md` and `agents/openai.yaml`; the latter declares the\nexisting Mencoro MCP connection. Users need to connect their Mencoro account through OAuth.\nThese skills require no additional backend endpoint or local executable.\n\nThe portal stores an uploaded snapshot. Upload revised bundles when instructions change, and test\neach workflow with a connected account before submitting the app. See the\n[OpenAI skills guide](https://learn.chatgpt.com/docs/build-skills).\n\n## The bridge\n\n### Run it\n\n```bash\nexport MENCORO_API_KEY=mcp_pat_your_token\nnpx -y @mencoro/mcp            # serve on stdio\nnpx -y @mencoro/mcp doctor     # check the endpoint, the token, and list the tools\n```\n\n### Docker\n\n```bash\ndocker run --rm -i -e MENCORO_API_KEY=mcp_pat_your_token ghcr.io/mencoro/mencoro-mcp\n```\n\n`-i` is required and `-t` must be omitted: the MCP transport is this process's stdin and stdout.\n\n### Options\n\n| | |\n|---|---|\n| `MENCORO_API_KEY` | Personal access token. Without it the bridge still starts and still advertises the full catalogue; `get_mencoro_guide` answers from the public guide, and every other tool answers with setup instructions instead of data. |\n| `MENCORO_MCP_URL` | Upstream endpoint. Defaults to `https://api.mencoro.com/mcp`. |\n| `--url <url>` | Same, as an argument. |\n| `--header \"Name: value\"` | Extra HTTP header, repeatable. An `Authorization` header here overrides `MENCORO_API_KEY`. |\n| `doctor` | Connect once, print the server version, negotiated protocol, tool and prompt catalogue, then exit. |\n| `--help`, `--version` | |\n\n### What it actually does\n\nIt splices your client's stdio transport onto a Streamable HTTP transport and forwards every\nJSON-RPC frame verbatim, in both directions. The only frame it looks inside is the handshake —\nenough to echo the negotiated protocol version back upstream and to rebuild the session if the\nserver evicts it, which a deploy or a scale-down will do. It knows no other method, so it cannot\ndrift from the server: tools, prompts, resources, completions, progress notifications and\nanything added later all pass straight through.\n\n### Without a credential\n\nThe bridge starts anyway, serving [`catalog.json`](catalog.json) — a committed copy of what the\nhosted server advertises — plus a `mencoro_setup` tool. So `npx -y @mencoro/mcp` introspects to the\nsame tools and prompts a credentialed run does, and anything that scans the package sees a\nreal catalogue rather than a server that looks empty. Calling one of those tools returns the setup\ninstructions as an error; it never returns invented data. The exception is `get_mencoro_guide`, which\nreads only published material: the bridge forwards it to the hosted server's anonymous endpoint and\nreturns the real answer.\n\n`npm run sync:catalog` refreshes the file from the anonymous catalogue endpoint, and\n`npm run check:catalog` fails if the committed copy has fallen behind. A scheduled workflow runs\nthe check weekly, because the catalogue it mirrors lives in another repository and nothing in a\npull request here would notice it drifting.\n\n## Limits\n\n| | |\n|---|---|\n| Access | `read` always; `write` and `organization:manage` only when granted, and never beyond your own role. Confirmable changes run only with a token from `preview_operation`. |\n| Batches | Tools that act on tracked queries or clusters by id take at most 100 per call (500 for `start_auto_clustering`); each tool's input schema states its limits. |\n| Retention | Up to 16 months of history; dates outside the window are rejected. |\n| Transport | Streamable HTTP. |\n| Rate limiting | Repeatedly presenting an invalid credential is rate limited per IP. |\n| Result size | Large result sets are paginated; ask for a narrower window or a coarser granularity if a client truncates. |\n\n## Repository contents\n\n| | |\n|---|---|\n| `src/`, `test/` | The stdio bridge published as `@mencoro/mcp`. |\n| `catalog.json` | What the hosted server advertises, served by the bridge when it has no credential. |\n| `scripts/` | Manifest and catalogue checks run by CI. |\n| `server.json` | The [MCP registry](https://registry.modelcontextprotocol.io) manifest. |\n| `glama.json` | Glama directory ownership metadata. |\n| `chatgpt-app-submission.json` | ChatGPT app submission metadata and tool justifications. |\n| `skills/` | Ten reusable Mencoro workflows for ChatGPT: six analyses and four guided changes. |\n| `Dockerfile` | The image published to `ghcr.io/mencoro/mencoro-mcp`. |\n| `assets/`, `logo.png` | Brand assets used by directory listings. |\n\n## Development\n\n```bash\nnpm ci\nnpm run typecheck\nnpm test            # builds first, then runs the suite\nnpm run check:manifests\nnpm run check:catalog   # asks the hosted server whether catalog.json is still current\n```\n\nTests run the TypeScript sources directly through Node's type stripping, so development needs\nNode 22.18 or newer. The published package targets Node 20.19+, which CI verifies separately\nagainst the built artifact.\n\nReleases are cut by tagging. `npm version <patch|minor|major>`, mirror the new version into\n`server.json` (`.version`, the npm package entry, and the image tag), run\n`npm run check:manifests`, then push the tag — CI publishes to npm, GHCR and the MCP registry,\nin that order, then creates the GitHub release, which is what Glama builds a new version from.\n\n## Support\n\n* Product and account questions — [support@mencoro.com](mailto:support@mencoro.com)\n* Bugs in this package — [open an issue](https://github.com/mencoro/mencoro-mcp/issues)\n* Security — see [SECURITY.md](SECURITY.md)\n* About the server — [mencoro.com/features/mcp-server](https://mencoro.com/features/mcp-server/)\n* Privacy policy — [mencoro.com/legal/#privacy](https://mencoro.com/legal/#privacy)\n* Terms of service — [mencoro.com/legal/#terms](https://mencoro.com/legal/#terms)\n\n## Licence\n\nMIT. See [LICENSE](LICENSE).\n\nThe Mencoro name, logo and brand assets in `assets/` are trademarks of Mencoro and are not\ncovered by that licence.\n"}