Medplum MCP
Securely access and manage FHIR healthcare data stored in Medplum.
SEO and AI-visibility operator tools: site health, ranked actions, ranks, visitor behavior.
Pick the AI app you use, then copy the settings.
Passed 4/4 checks · What you ask goes through the maker’s server (app.getcited.dev) · ✓ Commands checked Nov 13, 2026
First: which AI do you use?
Pick your app and the steps appear below.
Works with Claude · about 5 min
You need a GetCited key (create it on the maker’s site) · Set it up once on claude.ai or the desktop app, then use it in chat · free accounts can add 1 · on Team/Enterprise an Owner adds it
Open the maker’s site, sign up and create an API key for the next step. Check the maker’s site for pricing and free plans.
CustomizeConnectors
Copy each value into the field with the same name in Claude, then click Continue
GetCitedhttps://app.getcited.dev/api/mcpUnder Request headers, add this name and value
AuthorizationBearer <paste your key here>Paste the key only into the app’s field, never into a chat or to anyone
Click Continue past the sign-in settings Claude detected · under Authentication choose what the maker says (Sign in now, Sign in when needed or No sign in), then click Add
+ConnectorsGetCited
Use GetCited and tell me what you can do for me, then show me one thing✓ If Claude says it is using GetCited or shows a GetCited tool in the answer, you are connected
Menu names checked against Anthropic’s help page on Nov 11, 2026 · your screen may differ slightly by app version
ChatGPT cannot connect GetCited yet
GetCited needs your own key to connect, but OpenAI’s help page only describes OAuth sign-in; there is no key option we could verify
A · Use an app that can connect GetCited
B · Others in Clinics & health that work with ChatGPT
Picked from the most used in the same category, only ones that connect by address with no key
Works with Claude Code · about 5 min
You need a GetCited key (create it on the maker’s site)
Open the maker’s site, sign up and create an API key for the next step. Check the maker’s site for pricing and free plans.
Mac: press Command+Space and type Terminal · Windows: open PowerShell
claude mcp add --transport http --scope user getcited https://app.getcited.dev/api/mcp --header 'Authorization: Bearer your-value'Replace “your-value” with your key before pressing Enter
Paste the key only into the app’s field, never into a chat or to anyone
You should see GetCited listed as connected
Use GetCited and tell me what you can do for me, then show me one thing✓ If Claude Code says it is using GetCited or shows a GetCited tool in the answer, you are connected
Menu names checked against Anthropic’s help page on Nov 11, 2026 · your screen may differ slightly by app version
Works with Cursor · about 5 min
You need a GetCited key (create it on the maker’s site)
Open the maker’s site, sign up and create an API key for the next step. Check the maker’s site for pricing and free plans.
In the GetCited settings, Authorization is empty; add your key and save
Paste the key only into the app’s field, never into a chat or to anyone
Use GetCited and tell me what you can do for me, then show me one thing✓ If Cursor says it is using GetCited or shows a GetCited tool in the answer, you are connected
Menu names checked against Cursor’s help page on Nov 11, 2026 · your screen may differ slightly by app version
Works with VS Code · about 5 min
You need a GetCited key (create it on the maker’s site)
Open the maker’s site, sign up and create an API key for the next step. Check the maker’s site for pricing and free plans.
In the GetCited settings, Authorization is empty; add your key and save
Paste the key only into the app’s field, never into a chat or to anyone
Use GetCited and tell me what you can do for me, then show me one thing✓ If VS Code says it is using GetCited or shows a GetCited tool in the answer, you are connected
Menu names checked against VS Code’s help page on Nov 11, 2026 · your screen may differ slightly by app version
Other apps that use MCP, such as Windsurf, Zed or Gemini CLI, each add servers differently. See how in the app list.
Address for apps that connect over the web
https://app.getcited.dev/api/mcpJSON settings are under “For developers” below
Claude Code
claude mcp add --transport http --scope user getcited https://app.getcited.dev/api/mcp --header 'Authorization: Bearer your-value'Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"getcited": {
"url": "https://app.getcited.dev/api/mcp",
"headers": {
"Authorization": "Bearer your-value"
}
}
}
}VS Code (mcp.json)
{
"servers": {
"getcited": {
"type": "http",
"url": "https://app.getcited.dev/api/mcp",
"headers": {
"Authorization": "Bearer your-value"
}
}
}
}Descriptions are as written by the maker.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Based on how this server connects and on each app’s own docs, checked Nov 10, 2026.
Connect over the internet in
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast
Tool names and descriptions exactly as the server reported them on Nov 14, 2026. The maker wrote them, not us; we show them as plain text.
how_to_authenticateThis server is not authenticated, so none of its SEO tools will answer. Call this for the exact steps to fix it. Retrying other tools will not help.
get_setup_statusThe onboarding as a checklist for one project: each step (profile, tech stack, competitors, first audit, keywords, rank check, GEO prompts, GEO check, visitor snippet) with whether it is done, what it needs and the tool that completes it, plus `next`, the first step still open. C
list_projectsLists the sites this API key can operate on and returns `projects`, newest first, each with id (the projectId every other tool takes), domain and createdAt. Read-only. Sites removed with remove_project are not listed, and an empty array means nothing is tracked yet. To find the s
add_projectRegister the site you are working in, and get its project id back. Pass the domain you derived from this codebase (git remote, deployed URL, site config). Safe to call every run: if the site is already tracked you get the same project back with created=false, so call this before
remove_projectStop tracking a site: it leaves list_projects, stops being crawled or checked, and frees a site slot on the plan. Nothing is erased. Its crawls, findings and history are kept, and add_project on the same domain brings the same project back with its history intact. Use it for a si
get_site_healthReturns the project's current state: the latest crawl (status, pages crawled, when), issue counts by severity and by rule, the open action count and the scores, where a dimension with no data yet is null rather than 0. Read-only. Call it after run_audit to see whether the crawl f
get_next_workThe one call an unattended agent needs: the findings worth acting on now, most important first, or an instruction to stand by until a given time. Ordering is severity weighted by the page's own measured traffic. Pages the owner excluded are never returned, and a page fixed recent
list_actionsReturns the prioritized problems filed for a project, most urgent first; priority 1 is most urgent, 5 least. Read-only. Defaults to open ones. By default it answers grouped: one entry per rule (or type) with the count, the priority, the rationale once and up to five example actio
get_actionReturns one action in full: type, priority, title, rationale (what was measured and why it matters), targetUrl, status, the claim and closing fields, and `payload`, the evidence (the audit rule id and its measured values, such as the current title and its length; the shape varies
claim_actionMarks an open action as claimed by this API key, so other agents working the same queue skip it, and returns the updated action. Only an open action can be claimed: one already claimed (by any agent, this one included), done or dismissed answers not_found, so a repeat call change
complete_actionMark a problem done after you have addressed it in the codebase. Pass `note` to record what you changed; the owner reads it to tell a real fix from a box ticked. Pass `commit` with the sha that carries the change: it is what lets a later move in rank or citations be traced to thi
dismiss_actionDrop a problem you are deliberately not acting on, and say why. `reason` is required and is shown to the site owner: explain what makes this finding wrong or inapplicable here, in a sentence they could disagree with. A dismissal without a real reason is worse than leaving the pro
run_auditQueues a fresh crawl and audit of the site and returns the crawl id and status, up to maxPages pages (default 100; the response says how many it used). Most crawls finish in under 30 seconds: pass wait: true to get the finished crawl in this call (it holds for at most 60 seconds,
add_keywordsStarts tracking search `terms` for a project and returns `added`, the number of new keywords. Pass terms as an array of plain search phrases (terms: ["seo tool", "rank tracker"]) with the projectId from add_project or list_projects. Terms are lowercased, and one already tracked i
list_keywordsReturns `keywords`, one row per tracked keyword, newest first: id (the keywordId rank_history takes), term, country, language, createdAt, `metric` (search volume, cpc, difficulty, fetchedAt) and `rank` (latest position within the top 30, null when the site is not in it, foundUrl,
rank_historyPass `keywordId`, which is the id field of an entry from list_keywords, together with the projectId that keyword belongs to. Returns the position samples for that keyword over the last N days (default 30), one per rank check, and a status saying whether it has ever been checked:
check_rankingsQueues a search-position check (top 30 results) for every keyword tracked on this project and returns status, jobId and the keyword count. The work runs asynchronously in the worker: the searches are submitted immediately and the results land about ten minutes later, sometimes lo
add_geo_promptsPass `prompts` as an array of objects, not strings: each is { prompt: "best seo tool for agents", stage?: "tofu" | "mofu" | "bofu", format?: "keyword" | "conversational" | "list" }, with the projectId from add_project or list_projects. These are the questions the brand should be
geo_summaryReturns how often the site appears in AI answers: one row per tracked prompt, and within it one entry per engine with runs, citedRuns, mentionedRuns, citedRate and mentionedRate, plus the competitor domains cited instead, over the last `days`. Read-only. Frequency over the window
check_geoQueues a run of every tracked GEO prompt against each configured AI answer engine and returns status, jobId and the prompt count. The work runs asynchronously in the worker and takes minutes; this returns as soon as it is queued. Poll geo_summary for the result, and remember a si
refresh_actionsRebuilds this project's action list from what is already measured (crawl findings, ranks, AI-engine citations, visitor behavior) by fixed rules: no model, no provider call, no quota. Every crawl already triggers one, so call it only after check_rankings or check_geo results have
get_behavior_digestReturns visitor analytics from the site's own traffic over the last `days`: sessions, engaged and bounce rates, channels including AI assistants, top pages, exit pages, statistically flagged high-bounce pages (z-test, n>=30) and friction (rage and dead clicks). Read-only. Needs t
set_project_profileStep one of the growth recipe, and the gate on the rest of it. Record what this site sells in the owner's words: productSummary (a paragraph, at most 600 characters), valueProposition (at most 300), audience (at most 300), plus optional marketCountry and marketLanguage as two low
get_project_profileThe stored profile for a project: the three texts as they were written and where they came from, the market country and language, the tracked competitors, the declared techStack next to the detectedStack the latest crawl saw, whether it is complete, and `missing`, which names the
list_opportunitiesThe opportunity queue: one row per query the site should hold and does not, or holds badly, built only from rows already measured. Keywords come from rank checks, prompts from AI answer-engine runs, and fanout rows from the sub-questions engines issued while answering them; `kind
get_content_briefEvidence for building a page for one query. Contains no wording; what to write is yours. `query` is one row's `query` from list_opportunities, exactly as it came back (a tracked keyword, a tracked prompt, or a fan-out sub-question); anything else answers not_found. You get back:
get_page_historyEvery measurement that touched one page, newest first, so a change can be matched to its effect. `url` is the full url of a page on the tracked site (https://example.com/guide); `days` defaults to 90. Three kinds of row on one timeline: `crawl` carries the status, word count, JSO
list_regressionsWhat is measurably worse than it was, over the last `days` (default 30). Three kinds: `rank`, a keyword whose best position over the last three checks is at least three places worse than over the three before, or that ranked and no longer does; `citation`, a prompt and engine who
get_page_profileReturns the visitor behaviour of one page over the last `days`: pageviews, entries, bounce rate, exits, 50% and 100% scroll rates, average active time, rage and dead clicks, and vsSite, a two-proportion z-test of its bounce rate against the rest of the site (only meaningful with
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 14, 2026
The registry name was verified against the domain getcited.dev (the registry checks domain ownership)
Code last changed 11 days ago
Not applicable: a cloud server run by the owner of getcited.dev; you don't run code from the repo
Responded in 541 ms (HTTP 200)
No sign-in needed
Read 29 tool descriptions and found no hidden instructions to the AI
Ask, share a tip or report that it does not work. Sorted by what people marked helpful.
No posts yet. Be the first to ask or share.
Posts here are written by users, not the PopNx team.
No reviews yet
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 4 of 4 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: Authorization
It runs in the maker’s cloud. Connect over the internet with nothing to install, but what you send passes through the maker’s servers.
The GitHub repo last changed 11 days ago, and the latest version (0.2.0) reached the registry 2 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT on the web (full MCP on Business and above; Pro read-only).
In the same category: Medplum MCP, Mirobody, Apple Health
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Securely access and manage FHIR healthcare data stored in Medplum.
Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.
Local-first Apple Health MCP server for questions about your sleep, workouts and heart data.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Client-side pieces for connecting a coding agent to GetCited: the MCP server definition, a Claude Code plugin with its skills, a Gemini CLI extension, and a small stdio proxy for clients that cannot speak Streamable HTTP.
GetCited audits a site the way an answer engine reads it, tracks where it ranks, records which AI engines cite it, and files each measured problem as an action with the evidence behind it. It never proposes the fix: your agent has the repository open and it does not.
The service itself is closed source. Everything in this repository is the connector — transport, manifests and prompts — so you can read exactly what your agent is being told and what leaves your machine.
Create a key under Settings → API keys in the app, then pick your client.
Claude Code
claude mcp add --transport http getcited https://app.getcited.dev/api/mcp \
--header "Authorization: Bearer $SEO_API_KEY"
Any client that reads a JSON config
{
"mcpServers": { "getcited": { "type": "http", "url": "https://app.getcited.dev/api/mcp", "headers": { "Authorization": "Bearer ${SEO_API_KEY}" } } } }
Gemini CLI
gemini extensions install https://github.com/bapierre/getcited-mcp
Clients without a remote transport (Claude Desktop, whose config takes a command rather than a URL) use the stdio proxy in src/:
claude mcp add getcited --env SEO_API_KEY="vseo_..." -- npx -y getcited-mcp
| Variable | Required | Meaning |
|---|---|---|
SEO_API_KEY | yes | The key from Settings → API keys. |
SEO_API_URL | no | Endpoint override. Defaults to https://app.getcited.dev/api/mcp. |
Without SEO_API_KEY the proxy still starts and lists the tools from a bundled snapshot (src/tool-snapshot.ts), so registries can inspect it; every call then fails with a message naming the variable. Refresh the snapshot after the hosted tool list changes with npm run build && SEO_API_KEY=vseo_... npm run snapshot.
llms-install.md is the same instructions written for an agent, so you can tell your assistant to set this up rather than doing it yourself.
| Path | What it is |
|---|---|
src/stdio.ts | The stdio proxy. Forwards JSON-RPC to the HTTPS endpoint and nothing else. |
src/tool-snapshot.ts | Tool definitions served when no key is set. Generated by scripts/snapshot-tools.mjs. |
Dockerfile | Builds the stdio proxy, for registries that run servers in a container. |
.claude-plugin/, skills/ | The Claude Code plugin and its two skills. |
gemini-extension.json | The Gemini CLI extension manifest. |
.mcp.json | A project-scoped Claude Code server entry. |
llms-install.md | Setup instructions addressed to an agent. |
Sites (list_projects, add_project, remove_project, get_site_health), onboarding and profile (get_setup_status, get_project_profile, set_project_profile), the queue (get_next_work, list_actions, get_action, claim_action, complete_action, dismiss_action, run_audit), growth (list_opportunities, get_content_brief, list_regressions, get_page_history), rankings (add_keywords, list_keywords, rank_history, check_rankings), AI visibility (add_geo_prompts, geo_summary, check_geo, run_brain) and visitors (get_behavior_digest, get_page_profile).
Each tool carries a title and the readOnlyHint or destructiveHint annotation that matches what it does. Full documentation, including what every number means and the rules the measurements follow: https://getcited.dev/docs/mcp.
Listed in the official MCP Registry as dev.getcited/mcp, published under a DNS-verified namespace.
getcited.dev/support · privacy · terms · MIT licensed.