ground-truth-mcp
Ground Truth is an MCP server that gives AI agents read-only tools to verify facts, pricing, endpoints, and market assumptions against live public data.
check_endpoint(Free): Probe any URL/API endpoint to verify reachability — reports status code, auth requirements, response time, content type, rate limit headers, and a sample response structure.check_pricing(Pro): Fetch a product's live pricing page to extract price points, plan names, and free-tier signals.estimate_market(Pro): Count packages on npm or PyPI matching a search term, returning total count and top results with version and activity signals.compare_competitors(Pro): Compare 2–10 npm or PyPI packages side by side using version, description, and npm score.verify_claim(Pro): Cross-reference a factual claim against multiple live URLs using keyword/substring matching to determine if each source supports or contradicts it.test_hypothesis(Pro): Run structured pass/fail tests against live data — supportsendpoint_exists,npm_count_above,npm_count_below, andresponse_contains— returning per-test results and an overall verdict.
Ground Truth
First tool call for AI agents: check a live endpoint in 60 seconds. No signup. No API key.
Ground Truth gives AI agents read-only verification against live public data. The first action is one free tool call: check_endpoint with url=https://example.com.
Do not start with pricing, compliance, claims, package-market, competitor, monitor, API-key, or payment examples. First prove the MCP connection works by calling check_endpoint.
Live: https://ground-truth-mcp.anishdasmail.workers.dev
Glama Quickstart: One Copy-Paste Path
Use this exact path from Glama or any MCP client that supports remote Streamable HTTP.
1. Add the remote server
{
"mcpServers": {
"ground-truth": {
"url": "https://ground-truth-mcp.anishdasmail.workers.dev/mcp"
}
}
}No X-API-Key is needed for this first call.
2. Paste this prompt
Use Ground Truth's
check_endpointtool withurlset tohttps://example.com. Do not answer from memory. Call the tool and return exactly:url,accessible,status,contentType, andresponseTimeMs.
3. Confirm the tool result
{
"url": "https://example.com/",
"accessible": true,
"status": 200,
"contentType": "text/html",
"responseTimeMs": 120
}responseTimeMs will vary. Seeing this shape means the first Ground Truth MCP tool call worked.
If the agent answers without a tool call
Reply with:
Call the MCP tool named
check_endpointnow. Useurl=https://example.com.
Free First Tools
After the first check_endpoint call works, these free tools work without signup or an API key:
check_endpoint: verify that a public URL or API endpoint responds.inspect_security_headers: inspect HSTS, CSP, frame protections, and related browser-facing security headers.
Activation Measurement
Portfolio baseline before this quickstart rewrite (30-day Glama signal): 1,075 profile views -> 0 tool calls.
Metric | Definition | Target by 2026-05-27 |
Profile views | Glama/Smithery/MCP Market listing views (30d) | Hold or grow only after activation works |
First successful tool call | MCP | >=1% of new profile views in the 7 days after rewrite ships |
Time to first call | Install/connect → first free tool result | < 60 seconds for a cold user following this README |
How to measure
Server-side: Durable Object
usage_log/ KV monthly counters forcheck_endpointandinspect_security_headers(production Worker). Compare week-over-week tool-call counts, not impressions alone.Optional telemetry: Set
GROUND_TRUTH_TELEMETRY=trueon the Worker to emitfirst_successful_tool_callevents to your analytics endpoint.Decision rule: If profile views continue but free tool calls stay at 0, keep the marketplace profile focused on only the Glama Quickstart prompt. Do not buy more impressions or lead with paid-tool examples.
Success event (log or dashboard):
{
"event": "first_successful_tool_call",
"tool": "check_endpoint",
"arguments": { "url": "https://example.com" }
}Health Check
Check that the hosted server card is reachable:
curl -I https://ground-truth-mcp.anishdasmail.workers.dev/.well-known/mcp/server-card.jsonSmoke-test the free tool over MCP HTTP:
SESSION_ID="$(curl -i -s -X POST https://ground-truth-mcp.anishdasmail.workers.dev/mcp \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"ground-truth-quickstart","version":"1.0.0"}},"id":0}' | tr -d '\r' | awk '/^mcp-session-id:/ {print $2}')"
curl -X POST https://ground-truth-mcp.anishdasmail.workers.dev/mcp \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: $SESSION_ID" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"check_endpoint","arguments":{"url":"https://example.com"}},"id":1}'What Ground Truth Verifies (after the first call)
Verification | Tool | Tier |
API endpoints |
| Free |
Security posture |
| Free |
Paid tools (pricing, compliance, claims, package-market, competitor checks, and monitors) are documented in Example Workflows and Tool Reference. Use them only after a successful free first call.
Concrete Use Case: Grounded Source Lookup
Use Ground Truth when an agent needs to verify that a source or endpoint exists before it uses that source in an answer, support reply, or research note.
Example input:
{
"name": "check_endpoint",
"arguments": {
"url": "https://example.com"
}
}Example output shape:
{
"url": "https://example.com/",
"accessible": true,
"status": 200,
"contentType": "text/html",
"responseTimeMs": 120,
"authRequired": false,
"rateLimited": false,
"sampleResponse": "<!doctype html><html..."
}This gives the agent source-backed context that the URL was reachable at call time and enough response detail to decide whether to use the source, retry, or ask for a different URL.
Complementary MCP Servers
Ground Truth is strongest when paired with a broader discovery or browser tool:
Tavily MCP Server for real-time web search and content discovery before you run a claim or pricing check.
Firecrawl MCP Server for deeper crawling and JS-heavy page extraction when raw HTML heuristics are not enough.
mcp-server-browserbase for interactive browser verification on pages that need clicks, auth, or client-side rendering.
These are complementary to Ground Truth rather than substitutes: they help you find or render the page, while Ground Truth helps you verify the resulting claim.
Why AI Agents Need Verification
Training data goes stale. Docs change. Pricing changes. Competitors appear. Endpoints break. Policies move.
Ground Truth gives agents a way to check before they commit:
Before quoting a price, pull the live pricing page
Before comparing vendors, scan their live pricing pages side by side
Before repeating a compliance claim, scan the live trust page
Before asserting a security baseline, inspect the response headers
Before saying a competitor does not exist, search the live registry
Before recommending an API, confirm the endpoint responds
Before calling one package more popular, compare real package metadata
Before repeating a policy, verify the language on the current public page
The result is simple: agents that are less confident for the wrong reasons and more reliable when it matters.
Example Workflows
Start with the Glama Quickstart above. The workflows below use paid tools or secondary free tools. Skip them until
check_endpointworks in your MCP client.
Verify a pricing claim
"Notion costs $8 per user per month for teams."
Use check_pricing on the live pricing page before repeating the number.
Check whether a competitor exists
"There is no good edge ORM alternative to Prisma."
Use estimate_market to search npm for edge orm and see what already exists.
Compare vendor pricing pages
"Vendor A is cheaper than Vendor B."
Use compare_pricing_pages to compare live pricing pages before repeating the claim.
Scan a trust page
"This vendor supports SOC 2, GDPR, and SCIM."
Use assess_compliance_posture before treating that as current fact.
Inspect browser-facing security headers
"This app has a strong public security baseline."
Use inspect_security_headers before making the claim.
Validate an API endpoint
"Use the OpenAI
/v1/modelsendpoint to list available models."
Use check_endpoint before recommending it in docs, code, or support replies.
Compare package popularity
"Vue has overtaken React."
Use compare_competitors to compare live package metadata instead of guessing.
Test a market assumption
"There are fewer than 50 MCP tools on npm."
Use test_hypothesis with a count-based check and return the actual result.
Confirm whether a support policy applies
"AWS Business support includes 24/7 phone support."
Use verify_claim against the current AWS support page before treating that as fact.
Access Modes
Free
Free tier includes limited monthly endpoint and security-header checks.
check_endpointinspect_security_headers100 requests per calendar month
Tracked by Cloudflare client IP in production, or
X-Anonymous-Client-Idfor local/dev testingNo signup or API key required
Agentic pay-per-use
Paid tools also support agentic pay-per-use.
Use an x402-compatible MCP client, or put an xpay MCP proxy in front of this server
Tool pricing starts at
$0.01per call and varies by toolBest for autonomous agents or variable workloads
Includes
estimate_market,check_pricing,compare_pricing_pages,compare_competitors,verify_claim,assess_compliance_posture, andtest_hypothesis
Team
Team subscription uses API-key billing with predictable monthly usage.
Requires
X-API-Keywith active billingDefault quota of 5,000 requests per calendar month
Monthly usage tracked per API key and tool
Includes all paid verification tools
API Examples
Direct API with curl
Direct HTTP calls to /mcp are session-based. Initialize once, keep the returned mcp-session-id, then call tools with that header.
This example calls the free check_endpoint tool with no API key.
SESSION_ID="$(curl -i -s -X POST https://ground-truth-mcp.anishdasmail.workers.dev/mcp \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "initialize",
"params": {
"protocolVersion": "2025-03-26",
"capabilities": {},
"clientInfo": {
"name": "ground-truth-example",
"version": "1.0.0"
}
},
"id": 0
}' | tr -d '\r' | awk '/^mcp-session-id:/ {print $2}')"
curl -X POST https://ground-truth-mcp.anishdasmail.workers.dev/mcp \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: $SESSION_ID" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "check_endpoint",
"arguments": {
"url": "https://example.com"
}
},
"id": 1
}'JavaScript fetch
const initResponse = await fetch("https://ground-truth-mcp.anishdasmail.workers.dev/mcp", {
method: "POST",
headers: {
"Accept": "application/json, text/event-stream",
"Content-Type": "application/json",
},
body: JSON.stringify({
jsonrpc: "2.0",
method: "initialize",
params: {
protocolVersion: "2025-03-26",
capabilities: {},
clientInfo: {
name: "ground-truth-example",
version: "1.0.0",
},
},
id: 0,
}),
});
const sessionId = initResponse.headers.get("mcp-session-id");
if (!sessionId) {
throw new Error("Missing mcp-session-id from initialize response");
}
const response = await fetch("https://ground-truth-mcp.anishdasmail.workers.dev/mcp", {
method: "POST",
headers: {
"Accept": "application/json, text/event-stream",
"Content-Type": "application/json",
"Mcp-Session-Id": sessionId,
},
body: JSON.stringify({
jsonrpc: "2.0",
method: "tools/call",
params: {
name: "check_endpoint",
arguments: {
url: "https://example.com",
},
},
id: 1,
}),
});
const result = await response.json();
console.log(result);Lightweight request checks for free access, team-plan billing, invalid keys, inactive billing, quota enforcement, and active paid access live in test-usage-enforcement.sh.
MCP Setup
If you use Claude Desktop, Cursor, or another MCP client, Ground Truth can plug in as a verification tool for your agent.
MCP stands for Model Context Protocol. It is the standard that lets AI apps call external tools.
If you want agentic pay-per-use without changing your app code, register this MCP URL with xpay and share the resulting proxy URL instead.
Claude Desktop
For the free first call, add this to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"ground-truth": {
"url": "https://ground-truth-mcp.anishdasmail.workers.dev/mcp"
}
}
}Cursor
For the free first call, add this to .cursor/mcp.json in your project or ~/.cursor/mcp.json globally:
{
"mcpServers": {
"ground-truth": {
"url": "https://ground-truth-mcp.anishdasmail.workers.dev/mcp"
}
}
}Optional Team API Key
Only add X-API-Key when you are using paid tools through the team plan:
{
"mcpServers": {
"ground-truth": {
"url": "https://ground-truth-mcp.anishdasmail.workers.dev/mcp",
"headers": {
"X-API-Key": "gt_live_your_key_here"
}
}
}
}Claude Code skill
If you want the same workflow without running a server, see claude-skill/.
Use Cases
Support
Verify a pricing claim before sending it to a customer
Check whether a support policy applies before escalating
Confirm an API endpoint exists before recommending it in a reply
Inspect public security headers before repeating a security claim
Product
Test whether a market assumption is true before writing a spec
Check whether a competitor exists before framing a roadmap
Compare package popularity before making a platform choice
Compare pricing pages before telling a team one vendor is cheaper
Compliance
Scan trust pages for SOC 2, GDPR, HIPAA, DPA, SSO, and SCIM signals
Verify pricing or packaging claims before repeating them internally
Check that a public terms or policy URL is reachable and current
Security & vendor diligence
Compare competitor pricing across live pages
Inspect browser-facing security headers before recommending or approving a vendor
Validate positioning claims with structured checks
Tool Reference
Tool | Tier | What it does |
| Free | Checks whether a URL or API endpoint exists and responds |
| Paid | Counts packages in npm or PyPI for a search term |
| Paid | Extracts prices, plans, and free-tier signals from a page |
| Free | Checks common browser-facing security headers on a public URL |
| Paid | Compares multiple live pricing pages side by side |
| Paid | Compares packages side by side with live metadata |
| Paid | Checks whether live sources support or contradict a claim |
| Paid | Scans a trust page for compliance and enterprise-security signals |
| Paid | Runs pass/fail tests against a live-data assumption |
Full reference: API_USAGE.md
Troubleshooting
Server not connecting
Confirm your MCP client supports remote Streamable HTTP servers.
Confirm the URL is exactly
https://ground-truth-mcp.anishdasmail.workers.dev/mcp.Restart or refresh the MCP client after editing its config.
Run the server-card health check:
curl -I https://ground-truth-mcp.anishdasmail.workers.dev/.well-known/mcp/server-card.json.
No tool calls appearing
Use the copy-paste prompt above and name the tool:
check_endpoint.Make sure the client has Ground Truth enabled in its tool list.
Start with a free tool. Do not add
X-API-Keyunless you are testing paid team access.If the model answers from memory, ask it to call
check_endpointexplicitly.
Missing environment variables
Hosted free checks do not need environment variables or an API key.
Local deployments need the
API_KEYSKV binding for quota tracking.Team billing needs
STRIPE_SECRET_KEYandSTRIPE_WEBHOOK_SECRET.x402 pay-per-use can use defaults for testnet, but production payments should set
GROUND_TRUTH_X402_NETWORKandGROUND_TRUTH_X402_RECIPIENT.
Unsupported MCP client
Use the direct MCP HTTP curl example above to confirm the server works.
Use a client with remote Streamable HTTP support for the hosted server.
If a directory requires stdio, use the included Glama bridge command:
npm run start:glama:stdio.For agentic paid tools in clients without native x402 support, put an xpay proxy in front of the live
/mcpURL.
Architecture
Ground Truth keeps the current Cloudflare Workers architecture:
Runtime: Cloudflare Workers
Storage: Durable Objects with SQLite for cache and usage logs
API keys: Cloudflare KV
Billing: Stripe team subscriptions plus x402-compatible pay-per-use
Protocol: MCP
Language: TypeScript
Distribution
Ground Truth is set up for multiple discovery and monetization paths:
Official MCP Registry publishing through
server.jsonfor ecosystem-wide discovery.Smithery publishing.
smithery.yamldefines the HTTP config schema (optionalX-API-Key) for Smithery's Install button and release flow. Use Smithery's Publish button in the dashboard to create a new release after deploying.xpay MCP monetization. You can register the live
/mcpURL with xpay to get a managed pay-per-tool proxy without changing the server code.MCP Market directory listing for additional discovery.
Apify is optional if you want a separate marketplace-native Actor version later; the current project stays optimized for remote MCP delivery rather than an Actor-first runtime.
Marketplace Profile Copy
Use these snippets when updating Glama, Smithery, MCP Market, or xpay profile fields.
Short description:
First tool call for AI agents: call
check_endpointwithurl=https://example.comto verify Ground Truth is connected. No signup or API key for the first endpoint check.
Try-first prompt:
Use Ground Truth's
check_endpointtool withurlset tohttps://example.com. Do not answer from memory. Call the tool and return exactly:url,accessible,status,contentType, andresponseTimeMs.
Setup note:
No API key is required for the first
check_endpointcall. AddX-API-Keyonly after that works and only for team-plan paid tools.
Development
cd ground-truth-mcp
npm install
npx wrangler devDeployment notes live in SETUP.md.
GitHub Releases
Stable GitHub releases are created automatically when you push a version tag that matches v*.
git tag v0.4.0
git push origin v0.4.0That tag triggers .github/workflows/release.yml, which typechecks the project and publishes a GitHub release from the tag. This is the repo-side piece Glama uses to detect stable releases during maintenance scans.
Glama Release
Glama releases are Docker-based, not GitHub releases. This repo includes a Dockerfile that starts the Worker locally through Wrangler on port 3000.
docker build -t ground-truth-mcp .
docker run --rm -p 3000:3000 ground-truth-mcpFor the Glama flow:
Claim the server in Glama.
Open the Dockerfile admin page, use this repository
Dockerfile, and run the deploy test.After the deploy test succeeds, click Make Release, choose a version, and publish.
If the score page still shows
No LICENSE, trigger a re-scan in the Glama admin interface after GitHub has recognized the rootLICENSEfile.If the score page still shows
No related servers, use Add related servers in the claimed Glama UI and addTavily MCP Server,Firecrawl MCP Server, andmcp-server-browserbase. That checklist item is managed on Glama's side rather than inglama.json.
If Glama generates an mcp-proxy-based build spec instead of using the repository Dockerfile, point the command at npm run start:glama:stdio. That bridge exposes the existing remote Ground Truth MCP endpoint over stdio so mcp-proxy can host it.
Scheduled Monitoring
Ground Truth can continuously monitor URLs, pricing pages, package versions, endpoint statuses, vendor claims, and custom keyword patterns — and alert you when anything changes.
Monitors are stored in the Durable Object SQLite database, scoped to your team API key. A Cloudflare cron trigger runs hourly and verifies all due monitors automatically.
Monitor target types
| What it checks |
|
|
| HTTP status, accessibility |
| — |
| Prices found, plans, free tier |
| — |
| Latest version on npm or PyPI |
| — |
| Whether claim text appears at a URL | The claim text | The URL to check |
| Comma-separated keyword presence |
|
|
Monitor tool reference
All monitor tools require a team API key (X-API-Key header). They count against your monthly quota.
create_monitor
Create a new monitor.
{
"name": "Stripe pricing",
"target_type": "pricing_page",
"target_value": "https://stripe.com/pricing",
"schedule": "daily"
}Argument | Type | Required | Description |
| string | yes | Human-readable label |
| enum | yes | See table above |
| string | yes | URL or package identifier |
| string | no | Evidence URL (vendor_claim) or keyword list (custom_prompt) |
|
| no | Default: |
| string | no | Email or webhook URL (stored, not yet dispatched) |
Returns: { id, name, target_type, target_value, schedule, created_at }
list_monitors
List monitors owned by this API key.
{ "active_only": true }Returns: { monitors: [...], total }
run_monitor_now
Immediately execute a monitor's check outside its normal schedule.
{ "monitor_id": "mon_abc123" }Returns: { monitor_id, result_id, status, changed, old_value, new_value, confidence, evidence, run_at }
status is one of changed, unchanged, or error.
get_monitor_result
Retrieve recent run history for a monitor.
{ "monitor_id": "mon_abc123", "limit": 10 }Returns: { monitor_id, results: [...], total }
Each result includes status, changed, old_value, new_value, confidence, evidence, and run_at.
delete_monitor
Permanently delete a monitor and all its stored results.
{ "monitor_id": "mon_abc123" }Returns: { monitor_id, deleted, results_deleted }
generate_change_report
Generate a summary of monitor activity for the past day or week.
{ "period": "daily" }Argument | Type | Description |
|
| Time window — past 24h or 7d |
| boolean | Also list stable monitors (default false) |
Returns:
{
"period": "daily",
"from": "2026-05-25T00:00:00.000Z",
"to": "2026-05-26T00:00:00.000Z",
"summary": {
"monitors_run": 3,
"changes_detected": 1,
"failed_checks": 0,
"unchanged": 2
},
"changes": [
{
"monitor_id": "mon_abc123",
"monitor_name": "Stripe pricing",
"target_type": "pricing_page",
"target_value": "https://stripe.com/pricing",
"run_at": "2026-05-25T14:00:00.000Z",
"old_value": "{\"pricesFound\":[\"$2.9%\"]}",
"new_value": "{\"pricesFound\":[\"$2.7%\"]}",
"confidence": 0.95,
"risk_level": "high"
}
],
"failures": [],
"recommended_actions": [
"Review high-risk pricing and claim changes before communicating to stakeholders."
]
}Example agent prompts for monitoring
Create a daily pricing monitor:
Use Ground Truth
create_monitorwith name "Stripe pricing", target_type "pricing_page", target_value "https://stripe.com/pricing", and schedule "daily".
Run it immediately and check for changes:
Use Ground Truth
run_monitor_nowwith the monitor_id from the previous step. Report whether anything changed and what the new prices are.
Get a weekly change report:
Use Ground Truth
generate_change_reportwith period "weekly". Summarize any high-risk changes and the recommended actions.
Track a package version:
Use Ground Truth
create_monitorwith name "Zod version watch", target_type "package", target_value "npm:zod", and schedule "daily". Then callrun_monitor_nowto record the baseline version.
Monitor a vendor compliance claim:
Use Ground Truth
create_monitorwith name "Acme SOC2 claim", target_type "vendor_claim", target_value "SOC 2 Type II", instructions "https://acme.example.com/security", and schedule "weekly".
Scheduled execution (cron)
The cron trigger is configured in wrangler.jsonc to fire every hour. On each tick it queries all active non-manual monitors, finds those past their interval (hourly/daily/weekly), runs the check, and records the result. No extra setup is needed after deployment.
To run due monitors on demand (admin/CI use):
# Trigger the scheduled run via the internal DO route
curl -X POST https://ground-truth-mcp.anishdasmail.workers.dev/internal/run-due-monitorsThis route is proxied by the Worker to the Durable Object's handleRunDueMonitors() method.
Local development
Run the smoke tests against a local wrangler dev instance:
# Start the local server
npm run start
# In another terminal — basic auth tests (no API key needed)
./test-monitors.sh
# Full test suite with a valid API key
GROUND_TRUTH_API_KEY=gt_live_your_key ./test-monitors.shDocumentation
API_USAGE.md for API calls and tool arguments
SETUP.md for deployment and billing setup
claude-skill/ for the zero-deployment Claude Code version
Support
License
MIT — see LICENSE
Made by Anish Das
Last updated: May 26, 2026 - Glama first-call activation rewrite
Maintenance
Latest Blog Posts
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/anish632/ground-truth-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server