protogrid

Search / io.github.QasperAI/qasper

qasper

R0· no sign-in

Discover and book businesses via AI agents.

v1.0.6 · active · repository · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality79good
Trust83of 100
Uptime, 30 days99%
Latency p50722 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "qasper": {
      "type": "http",
      "url": "https://qasper.ai/mcp"
    }
  }
}
claude mcp add --transport http qasper https://qasper.ai/mcp
[mcp_servers.qasper]
url = "https://qasper.ai/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "qasper": {
      "type": "remote",
      "url": "https://qasper.ai/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "qasper": {
      "type": "http",
      "url": "https://qasper.ai/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=qasper&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vcWFzcGVyLmFpL21jcCJ9"
}
{
  "servers": {
    "qasper": {
      "type": "http",
      "url": "https://qasper.ai/mcp"
    }
  }
}
{
  "mcpServers": {
    "qasper": {
      "httpUrl": "https://qasper.ai/mcp"
    }
  }
}
extensions:
  "qasper":
    enabled: true
    name: "qasper"
    type: streamable_http
    uri: "https://qasper.ai/mcp"
    timeout: 300

Quality 79 / 100good

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene79 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length3 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations10 of 10 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_refinement_options (destructiveHint, idempotentHint); send_inquiry (readOnlyHint); get_pricing (destructiveHint, idempotentHint); …
  • pass
    tools.token_costabout 6,658 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changesno tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependencies67 · weight 15
  • pass
    deps.known_vulnsno known advisory in 98 resolved packages
  • fail
    deps.mcp_sdk_version@modelcontextprotocol/sdk 1.30.1 has 1 known advisory (GHSA-6qxp-vccf-f47h); update @modelcontextprotocol/sdk to 1.31.0 or later
  • pass
    deps.resolvable@qasperai/[email protected] resolved: 98 packages

10 tools, about 6,658 tokens to load them all · tool set 76f373d615c2 · checked 2026-10-19 14:42 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 83 / 100

provenance80
liveness100
freshness45
hygiene100

+repository +namespace-matches-repo +reachable +uptime-99% -stale-194d

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

@qasperai/[email protected] npm97 dependencies, resolved · MCP SDK @modelcontextprotocol/sdk 1.30.1 · advisories checked 2026-10-19

advisoryseveritypackagefixed in
GHSA-6qxp-vccf-f47hMCP TypeScript SDK: OAuth client could send credentials to an authorization server chosen by the MCP serverhigh@modelcontextprotocol/[email protected]MCP SDK, directfixed in 1.31.0

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://qasper.ai/mcp streamable-httpnoneyes99%722 ms2025-11-252026-10-19
packageregistryversionruntimesecrets
@qasperai/mcp-servernpm1.0.6–

Tools (10)

ask_business_agentdestructiveAsk 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.
book_appointmentdestructiveBook 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.
check_availabilityread-onlyCheck 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.
find_next_available_appointmentsread-onlyFind 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.
get_business_inforead-onlyGet 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.
get_pricingread-onlyGet 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.
get_refinement_optionsread-onlyList 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.
get_servicesread-onlyGet 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.
search_businessesread-onlySearch 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 for the user. The 'cardChips', 'cardChipGroups', and 'matchedFilterValues' fields are UI-only display data — 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.
send_inquirydestructiveSend 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.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.github.QasperAI/qasper",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://qasper.ai/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "1.0.6",
  "packages": [
    {
      "version": "1.0.6",
      "transport": {
        "type": "stdio"
      },
      "identifier": "@qasperai/mcp-server",
      "registryType": "npm"
    }
  ],
  "repository": {
    "url": "https://github.com/QasperAI/mcp-server",
    "source": "github"
  },
  "description": "Discover and book businesses via AI agents."
}