Upshift
This server provides three read-only MCP tools for auditing websites, matching website templates to a trade, and quoting real Upshift prices.
Audit a website (
upshift_site_audit): fetch a live URL and get a 0-100 machine-legibility score, structured data, llms.txt/robots.txt checks, title/meta budgets, headings, alt-text coverage, HTTPS and document weight, with findings and fixes.Match a website template (
upshift_template_match): give an industry/trade and optional needs to get the top 3 template matches with demo links, store links, real prices, and match explanations.Quote a job (
upshift_quote): get real, catalog-generated prices and tiers for MCP server work or website work, with inclusions, turnaround, and guidance based on optional scope notes.
It is available as a remote MCP server or locally via npx upshift-mcp, and is free with a 20-calls/minute rate limit.
upshift-mcp
Upshift's reference MCP server. Three tools, deployed remote, on MCP spec revision 2026-07-28.
It exists to do two jobs at once: be genuinely useful to an agent, and be the worked example a buyer looks at before paying us to build theirs. Every price it quotes is generated from the live store, so it cannot invent one.
https://mcp.upshiftsites.com/mcp{
"mcpServers": {
"upshift": { "type": "http", "url": "https://mcp.upshiftsites.com/mcp" }
}
}Or run the same server locally, for clients that spawn a command rather than call a URL. Nothing to clone or build — it is published on npm:
{
"mcpServers": {
"upshift": { "command": "npx", "args": ["-y", "upshift-mcp"] }
}
}The same binary from a shell. stdio is the default; --http serves the full
Worker on localhost instead:
npx upshift-mcpTools
Tool | Does |
| Fetches a live page and reports structured data, llms.txt, robots.txt, title and meta budgets, headings, alt-text coverage, HTTPS and document weight, with a 0-100 score and a fix for each finding. |
| Ranks the 14 website template lines against a trade, with live demo links, store links and real prices, and explains why each matched. |
| The real price table for MCP server work and for websites. |
Free and rate limited to 20 calls/minute per IP.
Related MCP server: agent-ready-mcp
Layout
src/
worker.ts Cloudflare entrypoint: routing, origin policy, rate limit
server.ts The three tools; the one place production layers are applied
audit.ts Audit rules — pure, so every rule is testable without a network
safe-fetch.ts The SSRF guard for the one tool that takes a caller's URL
match.ts Template matching
services.ts What we charge for MCP work
catalog.generated.ts Template lines + prices, generated from the store
landing.ts The page a human gets at /
evals/ 12 qa_pairs, run over the real protocol
test/ 32 tests: protocol conformance + the pure logicWorking on it
npm install
npm run dev # http://127.0.0.1:8788/mcp
npm run ci:verify # typecheck + tests + evalswrangler dev needs macOS 13.5+ and will not boot on the build machine, so
npm run dev serves the production src/worker.ts on Node against an
in-memory KV. Same handler, same routes, same tools — not a second
implementation. Deployment is still wrangler deploy.
Prices come from ../upshift-agency-site/src/data/store.ts. After changing
them there:
npm run gen:catalogDeploying
Live since 2026-08-16 at https://mcp.upshiftsites.com/mcp. KV namespace
and custom domain are provisioned; npm run deploy ships a new version.
Listed
Official MCP registry:
com.upshiftsites/mcp, publishedactiveagainst the DNS-verified namespace.Glama — installable, with a released container built from this repo.
npm:
upshift-mcp—npx upshift-mcpruns this same server locally.
Honest gaps
In docs/VALIDATION.md — what is verified, what is not, the four real bugs the eval suite caught during the build (one of them a security bypass), and the fifth it missed. That document is the argument for shipping evals alongside a server, which is the part of this we sell; the miss is part of the argument, not an exception to it.
Licence
MIT. Lift anything useful. If you would rather we built and ran it for you, that is at https://upshiftsites.com/store/mcp-server-service/.
Available Tools
3 toolsupshift_quotePrice a jobARead-onlyInspect
Return Upshift's real prices. job_type 'mcp' covers MCP server work (registry listing, live tool preview, spec upgrade, full build); 'website' covers website templates and done-for-you launches. These are the actual listed prices, not estimates. Use when someone asks what a job costs, what a tier includes, or how long it takes. The figures are generated from the live store catalog, so this cannot quote a price that is not sold; it makes no network call and the same arguments always return the same answer.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Optional free text about the situation, used to pick which tier to lead with and to explain why, e.g. "we have a server on stdio" or "roofing company, no site". Never changes the prices themselves. | |
| job_type | Yes | 'mcp' for MCP server work, 'website' for website work. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| offers | Yes | |
| jobType | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations. It reveals that the tool is deterministic ('same arguments always return the same answer'), makes no network call, and generates prices from a live store catalog. The annotations already declare readOnlyHint=true and openWorldHint=false, which the description aligns with. The only minor gap is not expanding on what the return structure looks like, but the tool has an output schema which mitigates this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of four sentences with clear front-loading: the first sentence states the core purpose. Each sentence adds distinct information. It could be slightly more structured (e.g., breaking guidelines into a separate sentence), but it's efficient and avoids waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 parameters (1 required), an output schema, and readOnlyHint+openWorldHint annotations, the description is complete. It covers purpose, when to use, constraints (no network call, deterministic), and parameter semantics. The output schema covers return structure. There are no gaps in information needed for an agent to correctly select and invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description goes further by explaining what values each enum choice covers (e.g., 'mcp' includes registry listing, live tool preview, etc.) and explains the scope parameter's purpose (free text to help pick a tier, never changes prices). This adds genuine value beyond the schema's minimal descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Return' with the resource 'Upshift's real prices' and clearly distinguishes between two job types (mcp and website). It immediately communicates that this tool provides actual listed prices, not estimates, and gives concrete examples of what each job_type covers, making it easy for an agent to understand exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use when someone asks what a job costs, what a tier includes, or how long it takes.' It also specifies limitations: it cannot quote a price that is not sold, and the same arguments always return the same answer. While it doesn't explicitly name sibling tools as alternatives, the context of pricing guidance is clearly delineated from other tools like upshift_site_audit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upshift_site_auditAudit a website for machine legibilityARead-onlyInspect
Fetch a live website and report how legible it is to search engines and AI assistants: structured data (JSON-LD), llms.txt, robots.txt, title and meta description, headings, image alt text, HTTPS and document weight. Returns findings with severity and a 0-100 score. Use this to check a real site before recommending changes to it. Makes one outbound request to the URL given, so it only sees what a fetch can establish — never rendering or browser metrics. Refuses private, loopback and link-local addresses, and reports a page as unreachable rather than scoring the error body.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute http(s) URL of the page to audit, e.g. https://example.com |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| score | Yes | |
| summary | Yes | |
| findings | Yes | |
| reachable | Yes | |
| structuredData | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint and openWorldHint, but the description adds significant context: makes one outbound request, only sees what fetch can establish, refuses private/loopback/link-local addresses, and reports unreachable pages rather than scoring error bodies. This exceeds annotation coverage and provides critical behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the core purpose and key features, each sentence adding new information: checklist, score, one outbound request, security restrictions, and unreachable behavior. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with output schema, the description covers purpose, usage, behavior, and security constraints comprehensively. It details limitations (no rendering) and edge cases (unreachable pages), making it complete for the agent to know what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear description for url, so the baseline is 3. However, the description adds value by specifying the URL must be absolute http(s) and gives an example, as well as implying constraints (real site, public address), compensating slightly above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool audits a website for machine legibility, listing specific checks (JSON-LD, llms.txt, etc.) and outputs a 0-100 score. It distinguishes from siblings by mentioning auditing a live site, which is unique among upshift_template_match and upshift_quote.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use this tool to check a real site before recommending changes, which contrasts with the sibling tools' likely non-audit purposes. It also explains when it's appropriate (real site) and what it does not do (no rendering or browser metrics), providing clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upshift_template_matchFind the website template for a tradeARead-onlyInspect
Given an industry or trade (and optionally what the business needs), rank Upshift's 14 website template lines and return the best three, each with a live demo link, the store link, real prices, and the words that made it match. Use when someone asks what a website for a given trade should look like or cost. Answers from a catalog held in the server, so it makes no network call and returns no matches — rather than a forced one — when the trade is outside the 14 lines.
| Name | Required | Description | Default |
|---|---|---|---|
| needs | No | Optional: what the business needs, e.g. "online booking, before/after photos". | |
| industry | Yes | The trade or industry, e.g. "roofing", "collision repair", "med spa". |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds behavioral context: it operates from a server-held catalog, makes no network call, and returns no matches (rather than forced) for out-of-scope trades. This reinforces and complements the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, consisting of three sentences that efficiently convey purpose, usage, and limitations without redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is an output schema (the context indicates 'Has output schema: true'), the description does not need to detail return values. It adequately covers the tool's purpose, usage context, limitations (no forced matches), and the fact that it uses a local catalog. For a tool with two well-documented parameters and a closed set of templates, this is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters documented. The description adds meaning by explaining that 'industry' is the trade and 'needs' is optional, and it describes the output parameters (demo link, store link, prices, match words). This provides additional context beyond the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'rank' and the resource 'Upshift's 14 website template lines'. It specifies the output (best three with demo link, store link, prices, match words) and distinguishes from sibling tools like site_audit and quote which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use when someone asks what a website for a given trade should look like or cost.' It also notes that it returns no matches for trades outside the 14 lines, providing context for when the tool is appropriate. However, it does not explicitly mention when not to use it or alternatives, though siblings are different enough that exclusion is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v1.0.3- First observed
upshift_quote - First observed
upshift_site_audit - First observed
upshift_template_match
TDQS
Each tool targets a completely distinct purpose: site audit checks existing websites, template match recommends templates by trade, and quote provides pricing. There is no overlap in functionality or output.
All tools use the 'upshift_' prefix and then a clear noun: 'site_audit', 'template_match', 'quote'. The pattern is consistent, though 'quote' is a single word while the others are verb_noun compound.
Three tools is an ideal scope for a narrow commercial service. Each tool is necessary for the core workflow (audit, recommend, quote), and there is no room for bloat.
The set covers the essential sales workflow: audit existing site, recommend a template, and provide pricing. A minor gap is lack of a tool to get detailed information about a specific template, but the match tool returns demo links and prices.
Maintenance
Related MCP Connectors
Robots-aware website audits, pre-crawl quotes, and structured evidence for people and agents.
19 free website QA and AI-visibility tools. Remote HTTP MCP, no account, no API key.
Free technical-SEO audit MCP: crawl a site, run checks, return an LLM-ready shareable report.
Generate 18 AI readiness files (llms.txt, ai.txt, RAG indexes, schema) for any website.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenancePoint it at your site, get a whole-site AEO/GEO audit plus a ready-to-run plan your agent can execute. Orchestrates the ai-seo and citation-intelligence MCPs. Ships as a Claude skill, Claude plugin, and MCP server. No API keys required.132MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to scan any website for agent-readiness and generate the necessary artifacts (llms.txt, WebMCP scaffold, structured data) to make it agent-ready.18MIT
- AlicenseNot gradedqualityCmaintenanceOpen-source MCP server that audits websites for AI search readiness, providing deterministic scoring (0-100) and prioritized fix lists for metrics like JSON-LD, llms.txt, heading hierarchy, and AI crawler access.1MIT

Agundur GEO Scannerofficial
AlicenseNot gradedqualityCmaintenanceChecks whether a website is readable and citable by AI search engines — llms.txt, Schema.org structured data, AI-bot access in robots.txt, content freshness, answer directness, E-E-A-T signals, plus a LocalBusiness Rich Results validator. Free, no API key, remote Streamable HTTP.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/samerdwykat-cmyk/upshift-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server