SKU & GTIN Doctor MCP server
Connect Claude, ChatGPT, Gemini, Grok, Cursor, VS Code, and other AI assistants to SKU & GTIN Doctor over MCP. Daily catalog checks for Shopify stores: missing SKUs, invalid or duplicate GTINs, missing prices, weights, and images, in one list with the evidence.
- Server URL:
https://skudoctor.agntwrk.com/mcp - Transport: Streamable HTTP
- Sign-in: OAuth 2.1 in your browser on first use; no API key
Connect your assistant
Claude Code
- Add the server. Use
--scope userto make it available in every project, or--scope projectto write it to.mcp.jsonfor your team. - Run
/mcpinside Claude Code and follow the browser sign-in (or runclaude mcp login skudoctor).
claude mcp add --transport http skudoctor https://skudoctor.agntwrk.com/mcpVendor documentation: code.claude.com/docs/en/mcp
Claude Desktop, claude.ai on the web, and Claude mobile
- Open Customize, then Connectors.
- Click +, then Add custom connector.
- Enter the server URL https://skudoctor.agntwrk.com/mcp and click Add, then sign in when asked.
- On Team and Enterprise plans an owner adds it first under Organization settings, then Connectors; members then sign in individually.
Anthropic connects to the server from its own network, so the URL must be reachable from the public internet. Connectors you add on the web also appear in the mobile apps. Custom connectors are available on all plans; the free plan allows one.
Vendor documentation: support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp
ChatGPT
- On the web, open Settings, then Security and login, and turn on Developer mode.
- In the Plugins section select the plus button to create a developer-mode app for a remote MCP server.
- Enter the server URL https://skudoctor.agntwrk.com/mcp and choose OAuth for authentication, then sign in when asked.
Developer mode is offered on paid web plans; your workspace admin may need to enable it. Write actions ask for confirmation by default.
Vendor documentation: developers.openai.com/api/docs/guides/developer-mode
OpenAI API
- Add an
mcptool to a Responses API request. - The API does not run the OAuth sign-in: your application obtains an access token for this server and passes it as
authorizationon every request.
{
"type": "mcp",
"server_label": "skudoctor",
"server_url": "https://skudoctor.agntwrk.com/mcp",
"authorization": "<access token>"
}Vendor documentation: developers.openai.com/api/docs/guides/tools-connectors-mcp
OpenAI Codex CLI
- Add the server to
~/.codex/config.toml. - Run
codex mcp login skudoctorand finish the sign-in in the browser.
[mcp_servers.skudoctor]
url = "https://skudoctor.agntwrk.com/mcp"codex mcp login skudoctorVendor documentation: learn.chatgpt.com/docs/extend/mcp?surface=cli
Gemini CLI
- Add the server.
- Run
/mcp auth skudoctorinside Gemini CLI and finish the sign-in in the browser.
gemini mcp add --transport http skudoctor https://skudoctor.agntwrk.com/mcpVendor documentation: geminicli.com/docs/tools/mcp-server/
Gemini app
- On gemini.google.com, open Settings, then Connected Apps.
- Under Custom apps choose Add a custom app.
- Enter the server URL https://skudoctor.agntwrk.com/mcp, then continue and sign in.
Google limits custom apps to personal Google accounts for adults in the US; work and school accounts are not supported. Connections made on the web also work in the mobile app.
Vendor documentation: support.google.com/gemini/answer/17209137
Grok and the xAI API
- In the Grok app, open grok.com/connectors, choose New Connector, then Custom, enter the server URL, and complete the sign-in.
- In the xAI API, add an
mcptool to a Responses API request athttps://api.x.ai/v1/responses. Pass an access token for this server asauthorization; the API does not run the sign-in.
{
"type": "mcp",
"server_label": "skudoctor",
"server_url": "https://skudoctor.agntwrk.com/mcp",
"authorization": "<access token>"
}Vendor documentation: docs.x.ai/docs/guides/tools/remote-mcp-tools, docs.x.ai/grok/connectors
Cursor
- Use the install link, or add the server to
~/.cursor/mcp.json(all projects) or.cursor/mcp.json(this project). - Complete the sign-in if Cursor asks for it.
{
"mcpServers": {
"skudoctor": {
"url": "https://skudoctor.agntwrk.com/mcp"
}
}
}Vendor documentation: cursor.com/docs/context/mcp/install-links
VS Code and GitHub Copilot
- Use the install link, run the command, or add the server to
.vscode/mcp.json. - Start the server from the MCP view or the file's inline Start action and complete the sign-in.
{
"servers": {
"skudoctor": {
"type": "http",
"url": "https://skudoctor.agntwrk.com/mcp"
}
}
}code --add-mcp '{"name":"skudoctor","type":"http","url":"https://skudoctor.agntwrk.com/mcp"}'Vendor documentation: code.visualstudio.com/docs/copilot/customization/mcp-servers
Any other MCP client
- Add a remote (HTTP) MCP server with the URL https://skudoctor.agntwrk.com/mcp.
- It speaks Streamable HTTP and signs in with OAuth 2.1 (authorization code with PKCE S256, dynamic client registration). Clients that follow the MCP authorization spec discover everything from the URL.
- To test a connection, run the MCP Inspector and choose the Streamable HTTP transport.
npx @modelcontextprotocol/inspector --server-url https://skudoctor.agntwrk.com/mcp --transport httpVendor documentation: modelcontextprotocol.io/docs/tools/inspector
Tools
healthread-onlyReport that the app is up, its name, and the enabled features.
whoamiread-onlyReturn the signed-in user (id, email, name) and the scope (store or tenant) every other tool acts on. Use it to confirm which account an answer is about.
sync_statusread-onlyFor each resource this app mirrors from the store (products, inventory, ...): how many objects are mirrored and when the mirror last changed. Use to judge how fresh the data behind findings and product lookups is.
search_productsread-onlySearch the store's mirrored products by a substring of the title, a variant SKU, or a variant barcode (case-insensitive). Returns compact rows, sorted by title, paged with offset. Use get_product for the full record of one.
get_productread-onlyOne mirrored product with all its variants (SKU, barcode, price, weight). Takes the id from search_products, a numeric Shopify id, or a product GID. Reads the mirror, not live store data.
validate_gtinread-onlyCheck a barcode offline: whether it is a valid GTIN (8, 12, 13, or 14 digits with the right check digit), its type, the check digit it should have, and its GTIN-14 form. Spaces and hyphens are ignored. Does not look anything up.
list_findingsread-onlyList the findings (problems the checks found) for this store, newest first. Filter by status, severity, or check id; page with offset. Use findings_summary first for the big picture and get_finding for one finding's evidence.
get_findingread-onlyGet one finding in full: its evidence, dates, what its check looks for and why it matters, and links to where it can be fixed. Use after list_findings when you need detail.
findings_summaryread-onlyCounts of this store's findings: all by status, and the open ones by severity and by check. Start here to see how bad things are before listing anything.
list_checksread-onlyList the checks this app can run: id, what each looks for, the plan that unlocks it, and whether it is enabled for this store (a check turned off in the store's settings is not). Use to find a valid check id for run_check or list_findings.
run_checkchanges dataRun one check now for this store and update its findings: new problems are created, fixed ones resolved. Returns how many findings were created, seen again, and resolved. Use run_scan to run every enabled check; do not call this repeatedly.
run_scanchanges dataRun every enabled check now for this store (as the dashboard's Run checks now button does) and return how many findings were created, how many are reported in total, and how many checks failed. Can take a while; use run_check for one check.
resolve_findingchanges dataMark a finding resolved. It reopens by itself if a later scan sees the problem again. Use after the problem is fixed or accepted.
snooze_findingchanges dataHide an open finding for a number of days (1 to 365); it reopens after that. Use for problems that will be dealt with later. A resolved finding cannot be snoozed.
reopen_findingchanges dataSet a snoozed or resolved finding back to open. Use when a problem was closed by mistake or is back.
Prompts
triage_findingsSummarize the open findings by severity and propose an order of work.
explain_finding(id)Explain one finding in plain words and say how to fix it.
Things to ask
- Who am I signed in as, and which store are you looking at?
- Find the product with SKU ABC-123 and show its variants.
- Is barcode 4006381333931 a valid GTIN?
- How many open findings do I have, and which are the most severe?
- Show me the evidence for the highest-severity open finding and tell me how to fix it.
- Run all checks and tell me what is new.
- Snooze the low-severity findings for two weeks.