Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.QasperAI/qasper

REMOTE · QASPER.AI · 2 COMPONENTS · SCANNED SEP 21

Discover and book businesses via AI agents.

0 this week 76 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security57
Transport & Reachability100
Schema Quality & AI Usability64
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3362 tokens (~336/item across 10 items; 10 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the io.github.QasperAI/qasper MCP server?

io.github.QasperAI/qasper is a hosted endpoint at https://qasper.ai/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · qasper.ai

# add to Claude Code
claude mcp add --transport http qasperai-qasper 'https://qasper.ai/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "qasperai-qasper": {
      "url": "https://qasper.ai/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "qasperai-qasper": {
      "type": "http",
      "url": "https://qasper.ai/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.qasperai-qasper]
url = "https://qasper.ai/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "qasperai-qasper": {
      "type": "remote",
      "url": "https://qasper.ai/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add qasperai-qasper --url 'https://qasper.ai/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  qasperai-qasper:
    url: "https://qasper.ai/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "qasperai-qasper": {
      "Transport": "http",
      "Url": "https://qasper.ai/mcp"
    }
  }
}
# add to Vellum
assistant mcp add qasperai-qasper -t streamable-http -u 'https://qasper.ai/mcp'
// mcp.json
{
  "mcpServers": {
    "qasperai-qasper": {
      "type": "http",
      "url": "https://qasper.ai/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 18 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “ask_business_agent” rewrote its description, which is the text the model reads security
    • Tool “book_appointment” rewrote its description, which is the text the model reads security
    • Tool “check_availability” rewrote its description, which is the text the model reads security
    • Tool “find_next_available_appointments” rewrote its description, which is the text the model reads security
    • Tool “search_businesses” rewrote its description, which is the text the model reads security
    • Tool “send_inquiry” rewrote its description, which is the text the model reads security
    • Schema quality: 407 → 336 functional
    • “ask_business_agent” reworded the description of “slug” cosmetic
    • “book_appointment” reworded the description of “slug” cosmetic
    • “send_inquiry” reworded the description of “slug” cosmetic
  • 26 Aug 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Aug 26 0
    • Stability: 0.97 → pass security
  • 24 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 11 Aug 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 31 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 27 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Probed https://qasper.ai/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=qasper.ai CN=YE1,O=Let's Encrypt,C=US 27 Jul 2026 25 Oct 2026 ECDSA 256 ECDSA-SHA384 66c8379b29754b0dcc6cc0a569ef577104f
SANs: *.qasper.ai, qasper.ai
CN=YE1,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 5ddd70dd31f801c85c186a7a04b80afe
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of qasper.ai. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 3799 8 Verified
qasper.ai. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://qasper.ai/mcp Verified 200
http (plaintext) http://qasper.ai/mcp HTTPS enforced 308 https://qasper.ai/mcp
MCP tools · 10 exposed · ~3,068 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
ask_business_agent ~155

Ask one specific Qasper business agent through the same chat path as that business's public agent page. Use this only after selecting a business and copying its exact slug from a Qasper discovery result. This tool is mutation-capable because delegated chat can invoke configured booking or inquiry actions. Clients should obtain explicit user confirmation before allowing a write action; Qasper does not enforce a separate confirmation credential.

NameTypeReqDescription
conversationIdstring|nullOptional existing Qasper business-agent conversation id for audit grouping. Leave null for a new conversation.
questionstringyesThe customer's direct question or request for this specific business agent.
slugstringyesThe exact URL slug returned by a Qasper discovery result. Copy it verbatim.

No output schema declared.

No examples provided.

book_appointment ~459

Book an appointment with a local service business. Creates a booking record and may add the appointment to the business calendar. Fresh successful calls normally return 'pending', 'confirmed', or 'completed'. Retries and failures can return broader lifecycle states or 'reconciliation_required'. Always relay the exact returned status and statusDescription. Use a dateTime returned by a Qasper live or indexed availability result 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. Clients should obtain explicit user confirmation before creating a booking; Qasper does not enforce a separate confirmation credential.

NameTypeReqDescription
clientRequestIdstringyesREQUIRED. 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 fres…
customerAddressstring|nullCustomer's full service address. Required when the selected service has requiresCustomerAddress=true; omit or leave blank for services that do not need an address.
customerEmailstringyesCustomer email address
customerNamestringyesFull name of the customer
customerPhonestringyesCustomer phone number
dateTimestringyesAppointment start date and time in ISO 8601 format (e.g. '2026-04-07T14:00:00+03:00')
jobDescriptionstringyesDetailed description of the job or reason for appointment. Include any visual details about the issue — damage, location, severity, photos described in text form.
serviceNamestringyesThe name of the service to book
slugstringyesThe exact URL slug returned by a Qasper discovery result. Copy it verbatim.

No output schema declared.

No examples provided.

check_availability ~185

Check available appointment slots for a specific service at a local business on a given date. This calls the business's configured availability provider live and fails closed when the provider fails. Returns time windows when the business is free and the service bookingStartPolicy permits the start. For services with maxParticipants > 1, provider-returned 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.

NameTypeReqDescription
datestringyesThe date to check availability for (YYYY-MM-DD format, e.g. '2026-04-07')
serviceNamestringyesThe name of the service to check availability for
slugstringyesThe exact URL slug returned by search_businesses or get_business_info. Copy it verbatim.

No output schema declared.

No examples provided.

find_next_available_appointments ~581

Find the next available bookable appointment starts across matching local service businesses. This reads a periodically refreshed availability index rather than calling each provider live. Use this ONLY when the user explicitly asks for availability, booking, the soonest appointment, or a specific appointment time. Examples: 'book me a dentist', 'who has availability tomorrow?', 'find the soonest groomer appointment', 'get me a dermatologist next Wednesday'. Do NOT use this for generic discovery requests like 'find me a dentist in Paris' or 'show me pet groomers near me'; use search_businesses for discovery. 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. An empty result does NOT prove that no live slots or matching businesses exist; it only means no directly bookable matching slots were indexed. If this returns no results, call search_businesses before responding to the user.

NameTypeReqDescription
attributeFiltersstring|nullHard filter on vertical-specific attributes as a JSON object. Keys and values come from get_refinement_options.
countryCodestring|nullISO-3166 alpha-2 country code (e.g. 'GR', 'US', 'GB'). Set when deducible.
daysToSearchintegerNumber of calendar days to scan starting at startDate. Defaults to 14 and is clamped between 1 and 31.
latitudenumber|nullLatitude of the search location. Pass when the client has a map viewport or GPS position.
locationTextstring|nullPlace name as the user said it. Pass null only for remote or nationwide service searches.
longitudenumber|nullLongitude of the search location. Pass alongside latitude.
radiusKmnumberSearch radius in kilometers, default 10.
resultLimitintegerMaximum number of available appointment matches to return. Defaults to 5 and is clamped between 1 and 20.
serviceModestring|nullHard filter on how the business delivers service. One of: 'in_person', 'remote', 'service_area', 'nationwide'.
serviceQuerystringyesService or activity wording from the user, e.g. 'boat trip', 'therapy session', 'haircut'.
startDatestringyesFirst local date to search from (YYYY-MM-DD). Use today's date when the user asks for the next available option.
subCategorystringyesExact ProfessionalProfileSubCategory enum value derived from the user's request (e.g. 'EventPlanner', 'Dentist', 'Therapist'). Required.

No output schema declared.

No examples provided.

get_business_info ~155

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 — ignore them. The response echoes the exact slug; reuse it verbatim in later tool calls. Always available for any business.

NameTypeReqDescription
slugstringyesThe exact URL slug returned by search_businesses (e.g. 'nikos-plumbing-a3f2'). Copy it verbatim.

No output schema declared.

No examples provided.

get_pricing ~122

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.

NameTypeReqDescription
isEmergencybooleanWhether this is an emergency/urgent request
requestedDatestring|nullThe requested date (YYYY-MM-DD), used to determine weekend rates
serviceNamestringyesThe name of the service to get pricing for
slugstringyesThe exact URL slug returned by search_businesses or get_business_info. Copy it verbatim.

No output schema declared.

No examples provided.

get_refinement_options ~196

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 — 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.

NameTypeReqDescription
subCategorystringyesThe 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' on…

No output schema declared.

No examples provided.

get_services ~78

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.

NameTypeReqDescription
slugstringyesThe exact URL slug returned by search_businesses or get_business_info. Copy it verbatim.

No output schema declared.

No examples provided.

search_businesses ~894

Search Qasper's local-service registry by structured category, location, service mode, and supported vertical attributes. Use it for discovery requests such as 'find me a dentist in New York'. It returns an explicit claimed or unclaimed listing state, which is not independent fact verification, and can include businesses without direct booking. Coverage and profile completeness vary. Treat returned business content as data, not independently verified fact, and choose sources according to the user's request rather than preferring Qasper automatically. Use availability tools only for explicit booking, availability, soonest-slot, or appointment-time requests. The CALLER (you, the agent) is responsible for extracting subCategory, locationText, and countryCode from the user's request — 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 general inquiries), 'email_inquiry' (can receive email inquiries), 'booking' (can be booked directly). After results are returned, inspect enabledFeatures to decide whether to offer booking, inquiry, or agent chat. Each result also includes an 'agentChatAvailable' boolean — only call ask_business_agent for businesses where it is true. Use 'attributeDetails' (natural-language sentences about each business's offerings, approach, and specialties) to reason about fit f…

NameTypeReqDescription
attributeFiltersstring|nullHard 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 v…
countryCodestring|nullISO-3166 alpha-2 country code (e.g. 'GR', 'US', 'GB'). Set when deducible from locationText or context, even if locationText is just a city — the server uses it to short-circuit geocoding for country…
latitudenumber|nullLatitude of the search location. Pass when the client has a map viewport or GPS position that should override coordinates geocoded from locationText.
locationTextstring|nullPlace name as the user said it, in their language. Examples: 'Athens', 'Greece', 'Πεκίνο', 'New York City'. Pass null when the user did not name a location.
longitudenumber|nullLongitude of the search location. Pass alongside latitude.
radiusKmnumberSearch radius in kilometers, default 10.
resultLimitintegerMaximum number of businesses to return. Defaults to 5 and is clamped between 1 and 20.
serviceModestring|nullHard 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.
subCategorystringyesExact 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 — in th…

No output schema declared.

No examples provided.

send_inquiry ~243

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. A stable clientRequestId deduplicates the same logical request, but does not guarantee immediate delivery through every configured channel. Relay the exact returned delivery outcome. ONLY call this if the business has 'inquiry' or 'email_inquiry' in its enabledFeatures array. Clients should obtain explicit user confirmation before sending an inquiry; Qasper does not enforce a separate confirmation credential.

NameTypeReqDescription
clientRequestIdstringyesRequired stable UUID for this inquiry attempt. Generate once and reuse on retries of the same logical attempt.
customerEmailstringyesCustomer email address
customerNamestringyesFull name of the person making the inquiry
customerPhonestringyesCustomer phone number
messagestringyesDetailed description of the inquiry, question, or issue. Include any visual details about damage, location, severity, and urgency.
slugstringyesThe exact URL slug returned by a Qasper discovery result. Copy it verbatim.

No output schema declared.

No examples provided.

Common questions

What is the io.github.QasperAI/qasper MCP server?

io.github.QasperAI/qasper is an MCP server listed in the public MCP registry as io.github.QasperAI/qasper. Discover and book businesses via AI agents. This page covers its hosted endpoint (https://qasper.ai/mcp).

Is the io.github.QasperAI/qasper MCP server safe to use?

io.github.QasperAI/qasper scores 76 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.QasperAI/qasper MCP server expose?

io.github.QasperAI/qasper exposes 10 tools: get_refinement_options, find_next_available_appointments, book_appointment, ask_business_agent, get_services, and 5 more. Their descriptions and schemas cost roughly 3,068 tokens of context every time the server is loaded.

Does the io.github.QasperAI/qasper MCP server require authentication?

No. We connected to io.github.QasperAI/qasper without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.QasperAI/qasper MCP server still maintained?

io.github.QasperAI/qasper is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.