@qasperai/mcp-server
Enables AI assistants to discover and book local service businesses like barbers, plumbers, and mechanics directly through MCP-compatible tools.
Executive verdict
trustsnap_82c77d8f1881a923Current trust snapshot
trustsnap_82c77d8f1881a923Canonical machine links
Own this MCP?
Claim ownership, prove control with a GitHub, DNS, HTTP, MCP metadata, or email-domain challenge, revalidate now, publish a badge, configure monitoring, and unlock a verified server profile.
POST /v1/servers/QasperAI/mcp-server/revalidateBadge embed
[](https://verify.sentinelsignal.io/servers/QasperAI/mcp-server)
MCP TrustOps
TrustOps turns this report into operational controls: freshness SLAs, authenticated validation, semantic benchmarks, policy exports, alert subscriptions, badges, cost/compliance metadata, and runtime routing. Fresh trusted index decisions stay separate from long-tail inventory so stale scores do not masquerade as current evidence.
/v1/decideAlert subscription types
MCP Runtime hosting
Verify Hosted MCP turns a trusted server report into a managed remote MCP endpoint with GitHub deployment provenance, sandbox policy, encrypted secrets, release history, rollback, and audit/usage events.
/hosted/{namespace}/{name}/mcp| Deployment | Status | Endpoint | Release |
|---|---|---|---|
| No hosted runtime deployments yet. | |||
Production readiness class
Evidence confidence
Recommended for
Client compatibility verdicts
Client compatibility only means the server shape can work with a client. Production trust decision and write-action publishing are evaluated separately so a client-compatible server can still be blocked for production.
Evidence provenance
initialize• OKtools_list• OKtransport_compliance_probe• Warningstep_up_auth_probe• Missingconnector_replay_probe• Missing — Frozen tool snapshots must survive refresh.request_association_probe• Missing — Roots, sampling, and elicitation should stay request-scoped.
Evidence provenance
initialize• OKtools_list• OKtransport_compliance_probe• Warning
Evidence provenance
action_safety_probe• Error
Evidence provenance
tool_snapshot_probe• Missingconnector_replay_probe• Missing
Why compatibility is limited by client
Remediation checklist
OpenAI connectors expect OAuth for remote server auth.Dynamic client registration materially improves connector setup.search fetch only is not yet satisfiedoauth configured is not yet satisfiedadmin refresh required is not yet satisfiedsafe for company knowledge is not yet satisfied
Remediation checklist
search fetch only is not yet satisfiedoauth configured is not yet satisfiedadmin refresh required is not yet satisfiedsafe for company knowledge is not yet satisfiedsafe for messages api remote mcp is not yet satisfiedTransport compliance issues should be resolved before wider client rollout.
Remediation checklist
Add a clearer auth boundary around risky write actions.Constrain or sandbox exec-capable tools before publishing broadly.
Verdict traces
- No active alert triggers.
Client verdict trace table
| Verdict | Status | Checks | Winning source | Conflicts |
|---|---|---|---|---|
openai_connectors |
Partially client-compatible | initialize, tools_list, transport_compliance_probe, step_up_auth_probe, connector_replay_probe, request_association_probe | live_validation | none |
claude_desktop |
Client-compatible | initialize, tools_list, transport_compliance_probe | live_validation | none |
unsafe_for_write_actions |
Publishing blocked | action_safety_probe | live_validation | none |
snapshot_churn_risk |
Low | tool_snapshot_probe, connector_replay_probe | history | none |
Publishability policy profiles
- Search Fetch Only: No
- Write Actions Present: Yes
- Oauth Configured: No
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
- Search Fetch Only: No
- Write Actions Present: Yes
- Oauth Configured: No
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
Compatibility fixtures
- remote_http_endpoint: Passes
- oauth_discovery: Degraded
- frozen_tool_snapshot_refresh: Passes
- request_association: Passes
- remote_transport: Passes
- tool_discovery: Passes
- auth_connect: Passes
- safe_write_review: Degraded
Authenticated validation sessions
Public validation is free. Authenticated validation is paid and proves scoped behavior, write-action safeguards, and authenticated tool execution.
/v1/verify/v1/ci/previewPublic server reputation
Incident & change feed
| Timestamp | Event | Details |
|---|---|---|
| May 28, 2026 03:17:39 AM UTC | Latest validation: healthy | Score 69.4 with status healthy. |
Capabilities
- OAuth:
- DCR/CIMD:
- Prompts:
- Homepage: https://glama.ai/mcp/servers/v3e1z320n4
- Docs: none
- Support: https://github.com/QasperAI/mcp-server
- Icon: none
- Remote endpoint: https://qasper.ai/mcp
- Server card: none
Security posture
Tool capability & risk inventory
| Tool | Capabilities | Risk | Findings | Notes |
|---|---|---|---|---|
get_refinement_options |
read network filesystem admin | Medium | none | No explicit safeguard hints detected. |
find_next_available_appointments |
read write exec network filesystem admin secrets export | Critical | command execution bulk data access secret material access freeform input surface filesystem mutation admin mutation | No explicit safeguard hints detected. |
book_appointment |
read write network admin | Medium | admin mutation | Safeguards hinted in metadata. |
get_services |
read network admin | Medium | none | No explicit safeguard hints detected. |
send_inquiry |
read write network | Medium | none | No explicit safeguard hints detected. |
get_pricing |
read network | Medium | none | No explicit safeguard hints detected. |
search_businesses |
read write network filesystem admin export | High | bulk data access filesystem mutation admin mutation | No explicit safeguard hints detected. |
check_availability |
read network admin | Medium | none | No explicit safeguard hints detected. |
get_business_info |
read network filesystem admin | Medium | none | No explicit safeguard hints detected. |
Write-action governance
Status detail: 2 high-risk tool(s), 1 exec-capable tool(s) are exposed without a clear auth boundary; 1 safeguard(s) and 1 confirmation signal(s) detected.
| Tool | Risk | Flags | Safeguards |
|---|---|---|---|
find_next_available_appointments |
Critical | command execution bulk data access secret material access freeform input surface filesystem mutation admin mutation | no |
search_businesses |
High | bulk data access filesystem mutation admin mutation | no |
Action-controls diff
New actions
| Action | Risk | Flags |
|---|---|---|
| No newly added actions. | ||
Changed actions
| Action | Change types | Risk |
|---|---|---|
| No materially changed actions. | ||
Why this score?
Algorithmic score breakdown
Compatibility profiles
Connector URL: https://qasper.ai/mcp # No OAuth metadata detected. # Server: QasperAI/mcp-server
{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": ["mcp-remote", "https://qasper.ai/mcp"]
}
}
}
smithery mcp add "https://qasper.ai/mcp"
curl -sS https://qasper.ai/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Actionable remediation
| Severity | Remediation | Why it matters | Recommended action |
|---|---|---|---|
| High | Add confirmation and dry-run semantics for risky actions | High-risk write, delete, exec, or egress tools should communicate safeguards clearly. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| High | Align session and protocol behavior with Streamable HTTP expectations | Clients increasingly rely on MCP-Protocol-Version, session teardown, and expired-session semantics. | Align MCP-Protocol-Version, MCP-Session-Id, DELETE teardown, and expired-session handling with the transport spec.Playbook
|
| High | Associate roots, sampling, and elicitation with active client requests | Modern MCP guidance expects roots, sampling, and elicitation traffic to be tied to an active client request instead of arriving unsolicited on idle sessions. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| High | Expose /.well-known/oauth-protected-resource | Without a protected-resource document, OAuth clients cannot discover auth requirements reliably. | Serve /.well-known/oauth-protected-resource and point it at your authorization server metadata.Playbook
|
| High | Keep connector refreshes backward compatible | Managed connector clients freeze tool snapshots, so removed tools, new required args, and breaking output changes can break published integrations after refresh. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| High | Publish OAuth authorization-server metadata | Clients need authorization-server metadata to discover issuer, endpoints, and DCR support. | Publish /.well-known/oauth-authorization-server from your issuer and include registration_endpoint when supported.Playbook
|
| High | Publish a complete server card | Missing or incomplete server-card metadata weakens discovery, documentation, and trust signals. | Serve /.well-known/mcp/server-card.json and include tools, prompts/resources, homepage, and support links.Playbook
|
| High | Stop asking users to paste secrets directly | Public MCP servers should prefer OAuth or browser-based auth guidance over in-band secret collection. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Adopt a current MCP protocol revision | Older protocol revisions reduce compatibility with newer clients and registry programs. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Close connector-publishing gaps | Connector catalogs care about protocol recency, session behavior, auth clarity, and tool-surface stability. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Document minimal scopes and return cleaner auth challenges | Modern clients expect granular scopes and step-up auth signals such as WWW-Authenticate scope hints. | Return granular scopes and WWW-Authenticate challenge hints instead of forcing overly broad auth upfront.Playbook
|
| Medium | Publish OpenID configuration | OIDC metadata improves token validation and client compatibility. | Expose /.well-known/openid-configuration with issuer, jwks_uri, and supported grants.Playbook
|
| Medium | Reduce tool-surface churn | Frequent add/remove or output-shape drift makes published connectors and cached tool snapshots brittle. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Repair prompts/list or stop advertising prompts | Prompt metadata should either work live or be removed from the advertised capability set. | Only advertise prompts if prompts/list works and prompt arguments are documented.Playbook
|
| Medium | Repair resources/list or stop advertising resources | Resource metadata should either work live or be removed from the advertised capability set. | Only advertise resources if resources/list works and resources expose stable URIs/types.Playbook
|
| Medium | Support resumable HTTP sessions cleanly | Modern MCP clients increasingly expect resumable session behavior on streamable HTTP transports. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Low | Expose modern utility surfaces like completions, pagination, or tasks | Utility coverage improves interoperability with larger clients and long-lived agent workflows. | Expose completions, pagination, and task metadata where supported so larger clients can plan and resume work safely.Playbook
|
| Low | Publish newer MCP capability signals | Roots, sampling, elicitation, structured outputs, and related metadata improve client understanding and ranking. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Low | Publish or reconcile the server in the official MCP registry | Official registry presence improves discovery confidence and cross-source consistency. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
Point loss breakdown
| Component | Current | Points missing |
|---|---|---|
| Recovery Semantics | 0/4 | -4.0 |
| Dependency Supply Chain Signal | 0.5/4 | -3.5 |
| Trust Confidence | 1.8/4 | -2.2 |
| Utility Coverage | 2/4 | -2.0 |
| Transport Compliance | 2/4 | -2.0 |
| Spec Recency | 2/4 | -2.0 |
| Safety Transparency | 2/4 | -2.0 |
| Result Shape Stability | 2/4 | -2.0 |
| Resource Contract | 2/4 | -2.0 |
| Registry Consistency | 2/4 | -2.0 |
| Rate Limit Semantics | 2/4 | -2.0 |
| Prompt Contract | 2/4 | -2.0 |
Validation diff
Need at least two validation runs before diffing changes.
Tool snapshot diff & changelog
Need at least two validation runs before building a tool changelog.
Connector replay
Required-argument replay breaks
| Tool | Added required args | Removed required args |
|---|---|---|
| No required-argument replay breaks detected. | ||
Output-schema replay breaks
| Tool | Removed properties | Added properties |
|---|---|---|
| No output-schema replay breaks detected. | ||
Transport compliance drilldown
Issues: missing_session_id, missing_protocol_header
Request association
Utility coverage
Benchmark tasks
| Benchmark task | Status | Evidence |
|---|---|---|
| Discover tools | Passes |
|
| Read-only fetch flow | Likely to fail |
|
| OAuth-required connect | Degraded |
|
| Safe write flow with confirmation | Likely to fail |
|
Registry & provenance divergence
| Field | Registry | Live server card |
|---|---|---|
| Title | n/a | n/a |
| Version | n/a | n/a |
| Homepage | n/a | n/a |
Active alerts
No active alerts for the current server state.
Aliases & registry graph
| Identifier | Source | Canonical | Score |
|---|---|---|---|
QasperAI/mcp-server |
glama_registry | yes | 69.36 |
Alias consolidation
Source disagreements
| Field | What differs | Observed values |
|---|---|---|
| No source disagreements detected. | ||
Install snippets
Connector URL: https://qasper.ai/mcp # No OAuth metadata detected. # Server: QasperAI/mcp-server
{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": ["mcp-remote", "https://qasper.ai/mcp"]
}
}
}
smithery mcp add "https://qasper.ai/mcp"
curl -sS https://qasper.ai/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Agent access & tool surface
tools/list, prompts/list, and resources/list checks.QasperAI/mcp-server.Claims & monitoring
No verified maintainer claim recorded.
Alert routing
| Watch | Team | Channels | Minimum severity |
|---|---|---|---|
| No active watch destinations. | |||
Maintainer analytics
Maintainer response quality
Maintainer annotations
No maintainer annotations have been recorded yet.
Maintainer rebuttals & expected behavior
No maintainer rebuttals or expected-behavior overrides are recorded yet.
Latest validation evidence
Failures
oauth_authorization_serverno authorization serveroauth_protected_resourceExpecting value: line 1 column 1 (char 0)openid_configurationno authorization serverserver_cardClient error '404 Not Found' for url 'https://qasper.ai/.well-known/mcp/server-card.json' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404
Checks
| Check | Status | Latency | Evidence |
|---|---|---|---|
action_safety_probe |
Error | n/a | 2 high-risk, 1 exec-capable tool(s); no clear auth boundary; safeguards=1; confirmation=book appointment. |
advanced_capabilities_probe |
Missing | n/a | No advanced MCP capability signals detected. |
connector_publishability_probe |
Warning | n/a | Publishability blockers: action safety, server card. |
connector_replay_probe |
Missing | n/a | No connector replay evidence recorded. |
determinism_probe |
OK | 457.4 ms | Check completed |
initialize |
OK | 495.4 ms | Protocol 2025-03-26 |
interactive_flow_probe |
Missing | n/a | Check completed |
oauth_authorization_server |
Missing | n/a | no authorization server |
oauth_protected_resource |
Error | 485.6 ms | Expecting value: line 1 column 1 (char 0) |
official_registry_probe |
Warning | n/a | Check completed |
openid_configuration |
Missing | n/a | no authorization server |
probe_noise_resilience |
OK | 557.5 ms | Fetched https://qasper.ai/robots.txt |
prompt_get |
Missing | n/a | not advertised |
prompts_list |
Missing | 503.0 ms | not advertised |
protocol_version_probe |
Warning | n/a | Claims 2025-03-26; 2 release(s) behind 2025-11-25. |
provenance_divergence_probe |
OK | n/a | Check completed |
request_association_probe |
Missing | n/a | No request-association capabilities were advertised. |
resource_read |
Missing | n/a | not advertised |
resources_list |
Missing | 553.2 ms | not advertised |
server_card |
Error | 603.5 ms | Client error '404 Not Found' for url 'https://qasper.ai/.well-known/mcp/server-card.json' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 |
session_resume_probe |
Warning | n/a | no session id |
step_up_auth_probe |
Missing | n/a | No OAuth or incremental-scope signals detected. |
tool_snapshot_probe |
Missing | n/a | no historical snapshot |
tools_list |
OK | 595.4 ms | 9 tool(s) exposed |
transport_compliance_probe |
Warning | 135.0 ms | Issues: missing session id, missing protocol header (bad protocol=400). |
utility_coverage_probe |
Missing | 122.5 ms | No completions evidence; no pagination evidence; tasks missing. |
Raw evidence view
Show raw JSON evidence
{
"checks": {
"action_safety_probe": {
"details": {
"auth_present": false,
"confirmation_signals": [
"book_appointment"
],
"safeguard_count": 1,
"summary": {
"bulk_access_tools": 2,
"capability_distribution": {
"admin": 7,
"exec": 1,
"export": 2,
"filesystem": 4,
"network": 9,
"read": 9,
"secrets": 1,
"write": 4
},
"destructive_tools": 0,
"egress_tools": 0,
"exec_tools": 1,
"high_risk_tools": 2,
"risk_distribution": {
"critical": 1,
"high": 1,
"low": 0,
"medium": 7
},
"secret_tools": 1,
"tool_count": 9
}
},
"latency_ms": null,
"status": "error"
},
"advanced_capabilities_probe": {
"details": {
"capabilities": {
"completions": false,
"elicitation": false,
"prompts": false,
"resource_links": false,
"resources": false,
"roots": false,
"sampling": false,
"structured_outputs": false
},
"enabled": [],
"enabled_count": 0,
"initialize_capability_keys": [
"logging",
"tools"
]
},
"latency_ms": null,
"status": "missing"
},
"connector_publishability_probe": {
"details": {
"blockers": [
"action_safety",
"server_card"
],
"criteria": {
"action_safety": false,
"auth_flow": true,
"connector_replay": true,
"initialize": true,
"protocol_version": true,
"remote_transport": true,
"request_association": true,
"server_card": false,
"session_resume": true,
"step_up_auth": true,
"tool_surface": true,
"tools_list": true,
"transport_compliance": true
},
"high_risk_tools": 2,
"tool_count": 9,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "warning"
},
"connector_replay_probe": {
"details": {
"reason": "no_historical_snapshot"
},
"latency_ms": null,
"status": "missing"
},
"determinism_probe": {
"details": {
"attempts": 2,
"baseline_signature": "da22673f0d158556263d07a1badd35e2cf35dc36f9c0ed9a2a60616d0e235bd5",
"errors": [],
"matches": 2,
"stable_ratio": 1.0,
"successful": 2
},
"latency_ms": 457.38,
"status": "ok"
},
"initialize": {
"details": {
"headers": {
"content-type": "text/event-stream"
},
"http_status": 200,
"payload": {
"id": 1,
"jsonrpc": "2.0",
"result": {
"capabilities": {
"logging": {},
"tools": {
"listChanged": true
}
},
"instructions": "Qasper exposes local service businesses (barbers, dentists, plumbers, hair salons, mechanics, and more) as bookable agents. Typical flow: (1) For search_businesses YOU extract the structured fields from the user's request: pick the most specific subCategory enum value (e.g. 'Therapist', 'Plumber', 'Dentist'); pass the place in locationText \u2014 for cities preserve the user's language ('\u03a0\u03b5\u03ba\u03af\u03bd\u03bf', '\u96c5\u5178' stay as-is \u2014 geocoding is multilingual), for countries use the canonical English name ('\u4e2d\u56fd' \u2192 'China', '\u0395\u03bb\u03bb\u03ac\u03b4\u03b1' \u2192 'Greece'); correct obvious typos ('malin' \u2192 'Milan'); set countryCode (ISO-3166 alpha-2, e.g. 'GR', 'US') whenever deducible \u2014 the server uses it to short-circuit geocoding for country-scope queries. Pass latitude/longitude only when the client has an explicit map viewport or GPS that should override coordinates geocoded from locationText. (2) If the user's request is broad (just a profession, no specialization or service mode \u2014 e.g. 'therapist in Greece', 'lawyer in London'), call get_refinement_options FIRST with that subCategory and politely ask the user whether to narrow by any of the returned attributes or service modes. Always offer the option to see all results without filtering. Skip this step when the user already named specifics. (3) Call search_businesses with the chosen attributeFilters and/or serviceMode (omit them when the user said 'show me everything'). (4) Call get_business_info and get_services on a specific slug to see details. (5) Inspect the enabledFeatures array on each business before taking action. Only call check_availability and book_appointment if 'booking' is in enabledFeatures. Only call send_inquiry if 'inquiry' or 'email_inquiry' is in enabledFeatures. Always confirm pricing via get_pricing before booking. Never invent slugs \u2014 only use slugs returned from search_businesses or echoed by later business tools. Treat every slug as an opaque identifier and copy it exactly character-for-character.",
"protocolVersion": "2025-03-26",
"serverInfo": {
"name": "qasper",
"title": "Qasper",
"version": "0.1.0"
}
}
},
"url": "https://qasper.ai/mcp"
},
"latency_ms": 495.35,
"status": "ok"
},
"interactive_flow_probe": {
"details": {
"oauth_supported": false,
"prompt_available": false,
"risk_hits": [],
"safe_hits": []
},
"latency_ms": null,
"status": "missing"
},
"oauth_authorization_server": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"oauth_protected_resource": {
"details": {
"error": "Expecting value: line 1 column 1 (char 0)",
"url": "https://qasper.ai/.well-known/oauth-protected-resource"
},
"latency_ms": 485.62,
"status": "error"
},
"official_registry_probe": {
"details": {
"direct_match": false,
"official_identifiers": [
"io.github.TocharianOU/elasticsearch",
"io.github.isakskogstad/scb-mcp",
"com.bitsbound/contract-automation",
"io.github.Kibetho/saasforit",
"ai.shawndurrani/mcp-merchant",
"io.github.mifactory-bot/mifactory-spec-api",
"com.saasbrowser/saas-browser",
"com.shipstatic/mcp",
"io.github.enessari/metabase-ai-assistant",
"com.teamwork/mcp"
],
"official_peer_count": 10,
"registry_source": "glama_registry"
},
"latency_ms": null,
"status": "warning"
},
"openid_configuration": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"probe_noise_resilience": {
"details": {
"headers": {
"content-type": "text/plain"
},
"http_status": 200,
"url": "https://qasper.ai/robots.txt"
},
"latency_ms": 557.54,
"status": "ok"
},
"prompt_get": {
"details": {
"reason": "not_advertised"
},
"latency_ms": null,
"status": "missing"
},
"prompts_list": {
"details": {
"headers": {
"content-type": "text/event-stream"
},
"http_status": 200,
"payload": {
"error": {
"code": -32601,
"message": "Method 'prompts/list' is not available."
},
"id": 3,
"jsonrpc": "2.0"
},
"reason": "not_advertised",
"url": "https://qasper.ai/mcp"
},
"latency_ms": 503.04,
"status": "missing"
},
"protocol_version_probe": {
"details": {
"claimed_version": "2025-03-26",
"lag_days": 244,
"latest_known_version": "2025-11-25",
"releases_behind": 2,
"validator_protocol_version": "2025-03-26"
},
"latency_ms": null,
"status": "warning"
},
"provenance_divergence_probe": {
"details": {
"direct_official_match": false,
"drift_fields": [],
"metadata_document_count": 1,
"registry_homepage": null,
"registry_repository": null,
"registry_title": null,
"registry_version": null,
"server_card_homepage": null,
"server_card_repository": null,
"server_card_title": null,
"server_card_version": null
},
"latency_ms": null,
"status": "ok"
},
"request_association_probe": {
"details": {
"reason": "no_request_association_capabilities_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resource_read": {
"details": {
"reason": "not_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resources_list": {
"details": {
"headers": {
"content-type": "text/event-stream"
},
"http_status": 200,
"payload": {
"error": {
"code": -32601,
"message": "Method 'resources/list' is not available."
},
"id": 5,
"jsonrpc": "2.0"
},
"reason": "not_advertised",
"url": "https://qasper.ai/mcp"
},
"latency_ms": 553.2,
"status": "missing"
},
"server_card": {
"details": {
"error": "Client error '404 Not Found' for url 'https://qasper.ai/.well-known/mcp/server-card.json'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://qasper.ai/.well-known/mcp/server-card.json"
},
"latency_ms": 603.46,
"status": "error"
},
"session_resume_probe": {
"details": {
"protocol_version": "2025-03-26",
"reason": "no_session_id",
"resume_expected": true,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "warning"
},
"step_up_auth_probe": {
"details": {
"auth_required_checks": [],
"broad_scopes": [],
"challenge_headers": [],
"minimal_scope_documented": false,
"oauth_present": false,
"scope_specificity_ratio": 0.0,
"step_up_signals": [],
"supported_scopes": []
},
"latency_ms": null,
"status": "missing"
},
"tool_snapshot_probe": {
"details": {
"current_tool_count": 9,
"reason": "no_historical_snapshot"
},
"latency_ms": null,
"status": "missing"
},
"tools_list": {
"details": {
"headers": {
"content-type": "text/event-stream"
},
"http_status": 200,
"payload": {
"id": 2,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"annotations": {
"openWorldHint": true,
"readOnlyHint": true
},
"description": "List the refinement dimensions (specializations, practice areas, service types, service modes, etc.) available for a specific subcategory. Call this BEFORE search_businesses when the user's request is broad (e.g. 'therapist in Greece', 'lawyer in London') so you can politely ask the user whether to narrow by any of these dimensions \u2014 and always offer them the option to see all results without filtering. Returns the attributes defined for the vertical with their possible option values, plus the universal serviceMode options. If refinementAvailable is false, skip refinement and go directly to search_businesses.",
"execution": {
"taskSupport": "optional"
},
"inputSchema": {
"properties": {
"subCategory": {
"description": "The exact subcategory enum the user is asking about (e.g. 'Therapist', 'Plumber', 'Dentist'). Pick the most specific value from ProfessionalProfileSubCategory based on the user's words. Use 'None' only when the user's request truly does not name a profession.",
"enum": [
"None",
"Doctor",
"Dentist",
"Therapist",
"Psychologist",
"Psychiatrist",
"Physiotherapist",
"Nutritionist",
"Optometrist",
"Veterinarian",
"Chiropractor",
"Nurse",
"Dermatologist",
"Gynecologist",
"Pediatrician",
"Cardiologist",
"Orthopedist",
"Urologist",
"Endocrinologist",
"Neurologist",
"Oncologist",
"Ophthalmologist",
"Rheumatologist",
"Gastroenterologist",
"Pulmonologist",
"ENTSpecialist",
"Radiologist",
"Anesthesiologist",
"Pathologist",
"Surgeon",
"PlasticSurgeon",
"SpeechTherapist",
"OccupationalTherapist",
"Midwife",
"Pharmacist",
"Osteopath",
"Podiatrist",
"Dietitian",
"Homeopath",
"Acupuncturist",
"Lawyer",
"Notary",
"FamilyLawyer",
"CriminalLawyer",
"CorporateLawyer",
"ImmigrationLawyer",
"RealEstateLawyer",
"LaborLawyer",
"IntellectualPropertyLawyer",
"TaxLawyer",
"Mediator",
"Accountant",
"FinancialAdvisor",
"TaxConsultant",
"InsuranceAgent",
"MortgageBroker",
"InvestmentAdvisor",
"Auditor",
"Bookkeeper",
"WealthManager",
"CryptoAdvisor",
"Plumber",
"Electrician",
"Mechanic",
"Carpenter",
"Painter",
"Locksmith",
"Cleaner",
"Gardener",
"PestControl",
"HvacTechnician",
"InteriorDesigner",
"Architect",
"Roofer",
"Tiler",
"Plasterer",
"WindowCleaner",
"PoolMaintenance",
"SecurityInstaller",
"SolarInstaller",
"Handyman",
"Mover",
"WasteRemoval",
"CarRental",
"HairSalon",
"Barber",
"NailTechnician",
"MassageTherapist",
"PersonalTrainer",
"YogaInstructor",
"TattooArtist",
"MakeupArtist",
"Aesthetician",
"Eyebrow",
"Eyelash",
"WaxingSpecialist",
"PermanentMakeup",
"NailArtist",
"BodyPiercer",
"Trichologist",
"SpaTherapist",
"SunbedStudio",
"Tutor",
"MusicTeacher",
"LanguageTeacher",
"DrivingInstructor",
"LifeCoach",
"MathTutor",
"ScienceTutor",
"ArtTeacher",
"DanceInstructor",
"SwimmingInstructor",
"MartialArtsInstructor",
"ChessCoach",
"CodingInstructor",
"ExamCoach",
"CareerCoach",
"SportsCoach",
"ItSupport",
"WebDeveloper",
"Photographer",
"Videographer",
"GraphicDesigner",
"SoftwareDeveloper",
"MobileAppDeveloper",
"DataAnalyst",
"CyberSecurityConsultant",
"SeoSpecialist",
"SocialMediaManager",
"ContentCreator",
"UxDesigner",
"DroneOperator",
"VideoEditor",
"SoundEngineer",
"ThreeDDesigner",
"AnimationArtist",
"Consultant",
"MarketingConsultant",
"Translator",
"BusinessCoach",
"HrConsultant",
"PrSpecialist",
"CopyWriter",
"VirtualAssistant",
"ProjectManager",
"SupplyChainConsultant",
"BrandingConsultant",
"EventPlanner",
"WeddingPlanner",
"Caterer",
"Dj",
"Chef",
"PrivateChef",
"BartenderMixologist",
"Florist",
"Entertainer",
"PhotoboothRental",
"TourOperator"
],
"type": "string"
}
},
"required": [
"subCategory"
],
"type": "object"
},
"name": "get_refinement_options"
},
{
"annotations": {
"openWorldHint": true,
"readOnlyHint": true
},
"description": "Find the next available bookable appointment starts across matching local service businesses. Use this for requests like 'find me the next available boat trip' or 'who has the soonest dentist appointment'. The CALLER (you, the agent) extracts the structured search fields the same way as search_businesses, and passes the service or activity wording in serviceQuery. The response only includes businesses with direct booking support, a matching service, and at least one slot whose bookingStartPolicy and remainingCapacity allow booking.",
"execution": {
"taskSupport": "optional"
},
"inputSchema": {
"properties": {
"attributeFilters": {
"default": null,
"description": "Hard filter on vertical-specific attributes as a JSON object. Keys and values come from get_refinement_options.",
"type": [
"string",
"null"
]
},
"countryCode": {
"default": null,
"description": "ISO-3166 alpha-2 country code (e.g. 'GR', 'US', 'GB'). Set when deducible.",
"type": [
"string",
"null"
]
},
"daysToSearch": {
"default": 14,
"description": "Number of calendar days to scan starting at startDate. Defaults to 14 and is clamped between 1 and 31.",
"type": "integer"
},
"latitude": {
"default": null,
"description": "Latitude of the search location. Pass when the client has a map viewport or GPS position.",
"type": [
"number",
"null"
]
},
"locationText": {
"default": null,
"description": "Place name as the user said it. Pass null only for remote or nationwide service searches.",
"type": [
"string",
"null"
]
},
"longitude": {
"default": null,
"description": "Longitude of the search location. Pass alongside latitude.",
"type": [
"number",
"null"
]
},
"radiusKm": {
"default": 10,
"description": "Search radius in kilometers, default 10.",
"type": "number"
},
"resultLimit": {
"default": 5,
"description": "Maximum number of available appointment matches to return. Defaults to 5 and is clamped between 1 and 20.",
"type": "integer"
},
"serviceMode": {
"default": null,
"description": "Hard filter on how the business delivers service. One of: 'in_person', 'remote', 'service_area', 'nationwide'.",
"type": [
"string",
"null"
]
},
"serviceQuery": {
"description": "Service or activity wording from the user, e.g. 'boat trip', 'therapy session', 'haircut'.",
"type": "string"
},
"startDate": {
"description": "First local date to search from (YYYY-MM-DD). Use today's date when the user asks for the next available option.",
"type": "string"
},
"subCategory": {
"description": "Exact ProfessionalProfileSubCategory enum value derived from the user's request (e.g. 'EventPlanner', 'Dentist', 'Therapist'). Required.",
"enum": [
"None",
"Doctor",
"Dentist",
"Therapist",
"Psychologist",
"Psychiatrist",
"Physiotherapist",
"Nutritionist",
"Optometrist",
"Veterinarian",
"Chiropractor",
"Nurse",
"Dermatologist",
"Gynecologist",
"Pediatrician",
"Cardiologist",
"Orthopedist",
"Urologist",
"Endocrinologist",
"Neurologist",
"Oncologist",
"Ophthalmologist",
"Rheumatologist",
"Gastroenterologist",
"Pulmonologist",
"ENTSpecialist",
"Radiologist",
"Anesthesiologist",
"Pathologist",
"Surgeon",
"PlasticSurgeon",
"SpeechTherapist",
"OccupationalTherapist",
"Midwife",
"Pharmacist",
"Osteopath",
"Podiatrist",
"Dietitian",
"Homeopath",
"Acupuncturist",
"Lawyer",
"Notary",
"FamilyLawyer",
"CriminalLawyer",
"CorporateLawyer",
"ImmigrationLawyer",
"RealEstateLawyer",
"LaborLawyer",
"IntellectualPropertyLawyer",
"TaxLawyer",
"Mediator",
"Accountant",
"FinancialAdvisor",
"TaxConsultant",
"InsuranceAgent",
"MortgageBroker",
"InvestmentAdvisor",
"Auditor",
"Bookkeeper",
"WealthManager",
"CryptoAdvisor",
"Plumber",
"Electrician",
"Mechanic",
"Carpenter",
"Painter",
"Locksmith",
"Cleaner",
"Gardener",
"PestControl",
"HvacTechnician",
"InteriorDesigner",
"Architect",
"Roofer",
"Tiler",
"Plasterer",
"WindowCleaner",
"PoolMaintenance",
"SecurityInstaller",
"SolarInstaller",
"Handyman",
"Mover",
"WasteRemoval",
"CarRental",
"HairSalon",
"Barber",
"NailTechnician",
"MassageTherapist",
"PersonalTrainer",
"YogaInstructor",
"TattooArtist",
"MakeupArtist",
"Aesthetician",
"Eyebrow",
"Eyelash",
"WaxingSpecialist",
"PermanentMakeup",
"NailArtist",
"BodyPiercer",
"Trichologist",
"SpaTherapist",
"SunbedStudio",
"Tutor",
"MusicTeacher",
"LanguageTeacher",
"DrivingInstructor",
"LifeCoach",
"MathTutor",
"ScienceTutor",
"ArtTeacher",
"DanceInstructor",
"SwimmingInstructor",
"MartialArtsInstructor",
"ChessCoach",
"CodingInstructor",
"ExamCoach",
"CareerCoach",
"SportsCoach",
"ItSupport",
"WebDeveloper",
"Photographer",
"Videographer",
"GraphicDesigner",
"SoftwareDeveloper",
"MobileAppDeveloper",
"DataAnalyst",
"CyberSecurityConsultant",
"SeoSpecialist",
"SocialMediaManager",
"ContentCreator",
"UxDesigner",
"DroneOperator",
"VideoEditor",
"SoundEngineer",
"ThreeDDesigner",
"AnimationArtist",
"Consultant",
"MarketingConsultant",
"Translator",
"BusinessCoach",
"HrConsultant",
"PrSpecialist",
"CopyWriter",
"VirtualAssistant",
"ProjectManager",
"SupplyChainConsultant",
"BrandingConsultant",
"EventPlanner",
"WeddingPlanner",
"Caterer",
"Dj",
"Chef",
"PrivateChef",
"BartenderMixologist",
"Florist",
"Entertainer",
"PhotoboothRental",
"TourOperator"
],
"type": "string"
}
},
"required": [
"subCategory",
"serviceQuery",
"startDate"
],
"type": "object"
},
"name": "find_next_available_appointments"
},
{
"annotations": {
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
},
"description": "Book an appointment with a local service business. Creates a booking record and adds the appointment to the business calendar. Returns a reference number and a status field indicating the actual resulting state \u2014 'pending' (the business reviews each booking), 'confirmed' (auto-approved by the business), or 'completed' (the business auto-finalizes). Use a dateTime returned by check_availability for the selected service so bookingStartPolicy is respected. For services with maxParticipants > 1, the start can be booked until remainingCapacity reaches 0. Read the status and statusDescription verbatim and relay them accurately: do NOT tell the customer 'confirmed' when the status is 'pending'. If the selected service has requiresCustomerAddress=true, ask the customer for their full service address before calling this tool and pass it as customerAddress. ONLY call this if the business has 'booking' in its enabledFeatures array.",
"execution": {
"taskSupport": "optional"
},
"inputSchema": {
"properties": {
"clientRequestId": {
"description": "REQUIRED. Stable UUID identifying this booking attempt. Generate ONCE at the moment you decide to book; reuse the SAME value on every retry of the same logical attempt so the server can dedup. A fresh value on retry will mint a duplicate calendar event.",
"type": "string"
},
"customerAddress": {
"default": null,
"description": "Customer's full service address. Required when the selected service has requiresCustomerAddress=true; omit or leave blank for services that do not need an address.",
"type": [
"string",
"null"
]
},
"customerEmail": {
"description": "Customer email address",
"type": "string"
},
"customerName": {
"description": "Full name of the customer",
"type": "string"
},
"customerPhone": {
"description": "Customer phone number",
"type": "string"
},
"dateTime": {
"description": "Appointment start date and time in ISO 8601 format (e.g. '2026-04-07T14:00:00+03:00')",
"type": "string"
},
"jobDescription": {
"description": "Detailed description of the job or reason for appointment. Include any visual details about the issue \u2014 damage, location, severity, photos described in text form.",
"type": "string"
},
"serviceName": {
"description": "The name of the service to book",
"type": "string"
},
"slug": {
"description": "The exact URL slug returned by search_businesses or get_business_info. Copy it verbatim.",
"type": "string"
}
},
"required": [
"slug",
"serviceName",
"dateTime",
"customerName",
"customerPhone",
"customerEmail",
"jobDescription",
"clientRequestId"
],
"type": "object"
},
"name": "book_appointment"
},
{
"annotations": {
"openWorldHint": true,
"readOnlyHint": true
},
"description": "Get the service catalog for a local service business, including service names, descriptions, estimated durations, price ranges, max participants, booking start policy, and whether the customer's address is required to book. Always available for any business.",
"execution": {
"taskSupport": "optional"
},
"inputSchema": {
"properties": {
"slug": {
"description": "The exact URL slug returned by search_businesses or get_business_info. Copy it verbatim.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_services"
},
{
"annotations": {
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
},
"description": "Send a general inquiry to a local service business. Use this when the customer has a question, needs a custom quote, or wants to describe an issue that doesn't fit a specific bookable service. The business owner will be notified immediately via every enabled inquiry channel and will contact the customer directly. ONLY call this if the business has 'inquiry' or 'email_inquiry' in its enabledFeatures array.",
"execution": {
"taskSupport": "optional"
},
"inputSchema": {
"properties": {
"customerEmail": {
"description": "Customer email address",
"type": "string"
},
"customerName": {
"description": "Full name of the person making the inquiry",
"type": "string"
},
"customerPhone": {
"description": "Customer phone number",
"type": "string"
},
"message": {
"description": "Detailed description of the inquiry, question, or issue. Include any visual details about damage, location, severity, and urgency.",
"type": "string"
},
"slug": {
"description": "The exact URL slug returned by search_businesses or get_business_info. Copy it verbatim.",
"type": "string"
}
},
"required": [
"slug",
"customerName",
"customerPhone",
"customerEmail",
"message"
],
"type": "object"
},
"name": "send_inquiry"
},
{
"annotations": {
"openWorldHint": true,
"readOnlyHint": true
},
"description": "Get a price quote for a specific service from a local business. Takes into account emergency requests, weekend rates, and other pricing rules. Always available for any business.",
"execution": {
"taskSupport": "optional"
},
"inputSchema": {
"properties": {
"isEmergency": {
"default": false,
"description": "Whether this is an emergency/urgent request",
"type": "boolean"
},
"requestedDate": {
"default": null,
"description": "The requested date (YYYY-MM-DD), used to determine weekend rates",
"type": [
"string",
"null"
]
},
"serviceName": {
"description": "The name of the service to get pricing for",
"type": "string"
},
"slug": {
"description": "The exact URL slug returned by search_businesses or get_business_info. Copy it verbatim.",
"type": "string"
}
},
"required": [
"slug",
"serviceName"
],
"type": "object"
},
"name": "get_pricing"
},
{
"annotations": {
"openWorldHint": true,
"readOnlyHint": true
},
"description": "Search for available local service businesses by structured fields. The CALLER (you, the agent) is responsible for extracting subCategory, locationText, and countryCode from the user's request \u2014 pick the most specific subCategory enum, pass the user's place wording in locationText, and infer countryCode when deducible. The server handles SQL filtering, geocoding, ranking, and bucketing. IMPORTANT: If the user's request is broad (e.g. 'therapist in Greece', 'lawyer in London') and they haven't named a specific specialization or service mode, call get_refinement_options FIRST with the subCategory, ask the user what to narrow by, then call this tool with the answer in attributeFilters and/or serviceMode. Skip that step when the user already named specifics or explicitly asked to see everything. Each result includes an 'enabledFeatures' array indicating what the business supports: 'info' (always on), 'inquiry' (can receive SMS inquiries), 'email_inquiry' (can receive email inquiries), 'booking' (can be booked directly). Use 'attributeDetails' (natural-language sentences about each business's offerings, approach, and specialties) to reason about fit for the user. The 'cardChips', 'cardChipGroups', and 'matchedFilterValues' fields are UI-only display data \u2014 ignore them. Each result also includes the exact slug to reuse verbatim in later tool calls. Pass latitude/longitude only when the client has an explicit map viewport or GPS position that should override the coordinates geocoded from locationText.",
"execution": {
"taskSupport": "optional"
},
"inputSchema": {
"properties": {
"attributeFilters": {
"default": null,
"description": "Hard filter on vertical-specific attributes as a JSON object. Keys and option values come from get_refinement_options. Example: '{\"specializations\":[\"trauma_ptsd\"],\"approaches\":[\"emdr\"]}'. Multiple values within a key are ALL required (AND). Multiple keys are ALL required (AND). Leave null when the user has no preference.",
"type": [
"string",
"null"
]
},
"countryCode": {
"default": null,
"description": "ISO-3166 alpha-2 country code (e.g. 'GR', 'US', 'GB'). Set when deducible from locationText or context, even if locationText is just a city \u2014 the server uses it to short-circuit geocoding for country-scope queries.",
"type": [
"string",
"null"
]
},
"latitude": {
"default": null,
"description": "Latitude of the search location. Pass when the client has a map viewport or GPS position that should override coordinates geocoded from locationText.",
"type": [
"number",
"null"
]
},
"locationText": {
"default": null,
"description": "Place name as the user said it, in their language. Examples: 'Athens', 'Greece', '\u03a0\u03b5\u03ba\u03af\u03bd\u03bf', 'New York City'. Pass null when the user did not name a location.",
"type": [
"string",
"null"
]
},
"longitude": {
"default": null,
"description": "Longitude of the search location. Pass alongside latitude.",
"type": [
"number",
"null"
]
},
"radiusKm": {
"default": 10,
"description": "Search radius in kilometers, default 10.",
"type": "number"
},
"resultLimit": {
"default": 5,
"description": "Maximum number of businesses to return. Defaults to 5 and is clamped between 1 and 20.",
"type": "integer"
},
"serviceMode": {
"default": null,
"description": "Hard filter on how the business delivers service. One of: 'in_person', 'remote', 'service_area', 'nationwide'. Only profiles matching the mode are returned. Leave null when the user has no preference.",
"type": [
"string",
"null"
]
},
"subCategory": {
"description": "Exact ProfessionalProfileSubCategory enum value derived from the user's request (e.g. 'Therapist', 'Plumber', 'Dentist'). Required. Use 'None' only if the user truly hasn't named a profession \u2014 in that case the server refuses with a clarification response, and you should ask the user instead of guessing.",
"enum": [
"None",
"Doctor",
"Dentist",
"Therapist",
"Psychologist",
"Psychiatrist",
"Physiotherapist",
"Nutritionist",
"Optometrist",
"Veterinarian",
"Chiropractor",
"Nurse",
"Dermatologist",
"Gynecologist",
"Pediatrician",
"Cardiologist",
"Orthopedist",
"Urologist",
"Endocrinologist",
"Neurologist",
"Oncologist",
"Ophthalmologist",
"Rheumatologist",
"Gastroenterologist",
"Pulmonologist",
"ENTSpecialist",
"Radiologist",
"Anesthesiologist",
"Pathologist",
"Surgeon",
"PlasticSurgeon",
"SpeechTherapist",
"OccupationalTherapist",
"Midwife",
"Pharmacist",
"Osteopath",
"Podiatrist",
"Dietitian",
"Homeopath",
"Acupuncturist",
"Lawyer",
"Notary",
"FamilyLawyer",
"CriminalLawyer",
"CorporateLawyer",
"ImmigrationLawyer",
"RealEstateLawyer",
"LaborLawyer",
"IntellectualPropertyLawyer",
"TaxLawyer",
"Mediator",
"Accountant",
"FinancialAdvisor",
"TaxConsultant",
"InsuranceAgent",
"MortgageBroker",
"InvestmentAdvisor",
"Auditor",
"Bookkeeper",
"WealthManager",
"CryptoAdvisor",
"Plumber",
"Electrician",
"Mechanic",
"Carpenter",
"Painter",
"Locksmith",
"Cleaner",
"Gardener",
"PestControl",
"HvacTechnician",
"InteriorDesigner",
"Architect",
"Roofer",
"Tiler",
"Plasterer",
"WindowCleaner",
"PoolMaintenance",
"SecurityInstaller",
"SolarInstaller",
"Handyman",
"Mover",
"WasteRemoval",
"CarRental",
"HairSalon",
"Barber",
"NailTechnician",
"MassageTherapist",
"PersonalTrainer",
"YogaInstructor",
"TattooArtist",
"MakeupArtist",
"Aesthetician",
"Eyebrow",
"Eyelash",
"WaxingSpecialist",
"PermanentMakeup",
"NailArtist",
"BodyPiercer",
"Trichologist",
"SpaTherapist",
"SunbedStudio",
"Tutor",
"MusicTeacher",
"LanguageTeacher",
"DrivingInstructor",
"LifeCoach",
"MathTutor",
"ScienceTutor",
"ArtTeacher",
"DanceInstructor",
"SwimmingInstructor",
"MartialArtsInstructor",
"ChessCoach",
"CodingInstructor",
"ExamCoach",
"CareerCoach",
"SportsCoach",
"ItSupport",
"WebDeveloper",
"Photographer",
"Videographer",
"GraphicDesigner",
"SoftwareDeveloper",
"MobileAppDeveloper",
"DataAnalyst",
"CyberSecurityConsultant",
"SeoSpecialist",
"SocialMediaManager",
"ContentCreator",
"UxDesigner",
"DroneOperator",
"VideoEditor",
"SoundEngineer",
"ThreeDDesigner",
"AnimationArtist",
"Consultant",
"MarketingConsultant",
"Translator",
"BusinessCoach",
"HrConsultant",
"PrSpecialist",
"CopyWriter",
"VirtualAssistant",
"ProjectManager",
"SupplyChainConsultant",
"BrandingConsultant",
"EventPlanner",
"WeddingPlanner",
"Caterer",
"Dj",
"Chef",
"PrivateChef",
"BartenderMixologist",
"Florist",
"Entertainer",
"PhotoboothRental",
"TourOperator"
],
"type": "string"
}
},
"required": [
"subCategory"
],
"type": "object"
},
"name": "search_businesses"
},
{
"annotations": {
"openWorldHint": true,
"readOnlyHint": true
},
"description": "Check available appointment slots for a specific service at a local business on a given date. Returns time windows when the business is free and the service bookingStartPolicy permits the start. For services with maxParticipants > 1, partially booked starts remain available until capacity is full. ONLY call this if the business has 'booking' in its enabledFeatures array. If the business doesn't support booking, share their contact info from get_business_info instead.",
"execution": {
"taskSupport": "optional"
},
"inputSchema": {
"properties": {
"date": {
"description": "The date to check availability for (YYYY-MM-DD format, e.g. '2026-04-07')",
"type": "string"
},
"serviceName": {
"description": "The name of the service to check availability for",
"type": "string"
},
"slug": {
"description": "The exact URL slug returned by search_businesses or get_business_info. Copy it verbatim.",
"type": "string"
}
},
"required": [
"slug",
"date",
"serviceName"
],
"type": "object"
},
"name": "check_availability"
},
{
"annotations": {
"openWorldHint": true,
"readOnlyHint": true
},
"description": "Get business information including name, type, service area, contact details, working hours, supported languages, enabled features, and a profile image (logo or personal photo) when the owner has uploaded one. Use 'attributeDetails' (natural-language sentences about the business's offerings, approach, and specialties) to reason about fit for the user. The 'cardChips' and 'cardChipGroups' fields are UI-only display data \u2014 ignore them. The response echoes the exact slug; reuse it verbatim in later tool calls. Always available for any business.",
"execution": {
"taskSupport": "optional"
},
"inputSchema": {
"properties": {
"slug": {
"description": "The exact URL slug returned by search_businesses (e.g. 'nikos-plumbing-a3f2'). Copy it verbatim.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_business_info"
}
]
}
},
"url": "https://qasper.ai/mcp"
},
"latency_ms": 595.44,
"status": "ok"
},
"transport_compliance_probe": {
"details": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json; charset=utf-8"
},
"bad_protocol_payload": {
"error": {
"code": -32000,
"message": "Bad Request: The MCP-Protocol-Version header value '1999-99-99' is not supported."
},
"id": "",
"jsonrpc": "2.0"
},
"bad_protocol_status_code": 400,
"delete_error": null,
"delete_status_code": null,
"expired_session_error": null,
"expired_session_status_code": null,
"issues": [
"missing_session_id",
"missing_protocol_header"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": false,
"transport": "streamable-http"
},
"latency_ms": 135.02,
"status": "warning"
},
"utility_coverage_probe": {
"details": {
"completions": {
"advertised": false,
"live_probe": "not_executed",
"sample_target": null
},
"initialize_capability_keys": [
"logging",
"tools"
],
"pagination": {
"metadata_signal": false,
"next_cursor_methods": [],
"supported": false
},
"tasks": {
"advertised": false,
"http_status": 200,
"probe_status": "missing"
}
},
"latency_ms": 122.45,
"status": "missing"
}
},
"failures": {
"oauth_authorization_server": {
"reason": "no_authorization_server"
},
"oauth_protected_resource": {
"error": "Expecting value: line 1 column 1 (char 0)",
"url": "https://qasper.ai/.well-known/oauth-protected-resource"
},
"openid_configuration": {
"reason": "no_authorization_server"
},
"server_card": {
"error": "Client error '404 Not Found' for url 'https://qasper.ai/.well-known/mcp/server-card.json'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://qasper.ai/.well-known/mcp/server-card.json"
}
},
"remote_url": "https://qasper.ai/mcp",
"server_card_payload": null,
"server_identifier": "QasperAI/mcp-server"
}
Known versions
- No versions recorded.
Validation history
| Timestamp | Status | Score | Latency | Tools |
|---|---|---|---|---|
| May 28, 2026 03:17:39 AM UTC | Healthy | 69.4 | 4983.0 ms | 9 |
Validation timeline
| Validated | Summary | Score | Protocol | Auth mode | Tools | High-risk tools | Changes |
|---|---|---|---|---|---|---|---|
| May 28, 2026 03:17:39 AM UTC | Healthy | 69.4 | 2025-03-26 | public | 9 | 2 | none |
Recent validation runs
| Started | Status | Summary | Latency | Checks |
|---|---|---|---|---|
| May 28, 2026 03:17:34 AM UTC | Completed | Healthy | 4983.0 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |