Audit a site's structured data and llms.txt, match a trade to a template, and quote real prices.
com.upshiftsites/mcp MCP Server
com.upshiftsites/mcp is an MCP server that audits a siteβs structured data and llms.txt, matches a trade to a template, and quotes real prices. It provides three tools and is deployed remotely, following the Model Context Protocol (MCP) specification (revision 2026-07-28).
π οΈ Key Features
Audit a siteβs structured data and llms.txt
Match a trade to a template
Quote real prices generated from the live store
Three MCP tools (toolCount: 3)
π Use Cases
Agent workflows that need site audit findings (structured data, llms.txt)
Template selection by trade
Price quotation that reflects the live store
β‘ Developer Benefits
Reference MCP server example for developers
Public endpoint: https://mcp.upshiftsites.com/mcp
Topics include cloudflare-workers, mcp, mcp-server, model-context-protocol, streamable-http, typescript
β οΈ Limitations
The readme excerpt does not specify other tool behaviors beyond the described three jobs
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.
Parameters1
url
string
required
Absolute http(s) URL of the page to audit, e.g. https://example.com
Raw schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Absolute http(s) URL of the page to audit, e.g. https://example.com"
}
},
"required": [
"url"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
upshift_template_match
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.
Parameters2
industry
string
required
The trade or industry, e.g. "roofing", "collision repair", "med spa".
needs
string
optional
Optional: what the business needs, e.g. "online booking, before/after photos".
Raw schema
{
"type": "object",
"properties": {
"industry": {
"type": "string",
"description": "The trade or industry, e.g. \"roofing\", \"collision repair\", \"med spa\"."
},
"needs": {
"description": "Optional: what the business needs, e.g. \"online booking, before/after photos\".",
"type": "string"
}
},
"required": [
"industry"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
upshift_quote
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.
Parameters2
job_type
string
required
'mcp' for MCP server work, 'website' for website work.
scope
string
optional
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.
Raw schema
{
"type": "object",
"properties": {
"job_type": {
"type": "string",
"enum": [
"mcp",
"website"
],
"description": "'mcp' for MCP server work, 'website' for website work."
},
"scope": {
"description": "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.",
"type": "string"
}
},
"required": [
"job_type"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
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.
The same binary from a shell. stdio is the default; --http serves the full
Worker on localhost instead:
bash
npx upshift-mcp
Tools
Tool
Does
upshift_site_audit(url)
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.
upshift_template_match(industry, needs?)
Ranks the 14 website template lines against a trade, with live demo links, store links and real prices, and explains why each matched.
upshift_quote(job_type, scope?)
The real price table for MCP server work and for websites.
Free and rate limited to 20 calls/minute per IP.
Layout
code
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 logic
Working on it
bash
npm install
npm run dev # http://127.0.0.1:8788/mcp
npm run ci:verify # typecheck + tests + evals
wrangler dev needs macOS 13.5+ and will not boot on the build machine, so
npm run dev serves the productionsrc/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:
bash
npm run gen:catalog
Deploying
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, published active against
the DNS-verified namespace.
Glama β
installable, with a released container built from this repo.
npm: upshift-mcp β
npx upshift-mcp runs this same server locally.
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.