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.

Kirah Local Services

REMOTE · KIRAH.AI · SCANNED SEP 20

Discover local services and availability, then create, track, reschedule, or cancel bookings.

Available components

+3 this week 75 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 Security63
Transport & Reachability100
Schema Quality & AI Usability60
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3096 tokens (~309/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 Management93
  • Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage93
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 76% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 10 captured tool definition(s), and no name or description among them implies an irreversible operation.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
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Install

How do I install the Kirah Local Services MCP server?

Kirah Local Services is a hosted endpoint at https://kirah.ai/api/mcp-registry-v1, 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 · kirah.ai

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

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.

  • 20 Sept 26 +1

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

  • 18 Sept 26 +1

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

  • 15 Sept 26 +1

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

  • 13 Sept 26 +1

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

  • 11 Sept 26 +1

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

  • 9 Sept 26 +1

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

  • 7 Sept 26 +1

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

  • 5 Sept 26 +1

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

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 20 Sept 2026 · Probed https://kirah.ai/api/mcp-registry-v1

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=kirah.ai CN=YE1,O=Let's Encrypt,C=US 7 Aug 2026 5 Nov 2026 ECDSA 256 ECDSA-SHA384 6738ca1679c7e7d25acb7a1be160db76adf
SANs: *.kirah.ai, kirah.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 kirah.ai. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 3799 8 Verified
kirah.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
Header Value
strict-transport-security max-age=31536000

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

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://kirah.ai/api/mcp-registry-v1 Verified 200
http (plaintext) http://kirah.ai/api/mcp-registry-v1 HTTPS enforced 301 https://kirah.ai/api/mcp-registry-v1
MCP tools · 10 exposed · ~3,016 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
cancel_booking ~353

Cancels one grant-authorized booking after explicit user confirmation. Reusing idempotency_key makes retries safe. Kirah refuses cancellations that could refund a charged deposit or restore a paid plan session; an allowed cancellation has no undo.

NameTypeReqDescription
agent_metadataobject
booking_refstringyesThe reference create_booking returned for the booking you want to CANCEL. It must be the SAME booking the supplied grant was issued for; a mismatch answers invalid_grant, indistinguishably from a for…
grantstringyesThe capability token from this booking's create_booking response (confirmation.grant). Required: without it there is no way to establish that you are the agent that made this booking. It must carry t…
idempotency_keystringyesREQUIRED — unlike create_booking, this action cannot derive one, because "cancel booking X" is byte-identical whether it is a transport retry or a deliberate second call. Omitting it answers missing_…
tenantstringyesThe tenant to operate on: the provider.tenant_slug value from the tenant's /.well-known/kirah.json manifest (the tenant's full domain, e.g. <slug>.kirah.ai).
NameTypeReqDescription
already_cancelledboolean
appointment_idstring
booking_refstring
booking_urlstring
cancel_fee_centsinteger
confirmationobject
demoboolean
demo_noticestring
deposit_centsinteger
detailstring
end_isostring
grantstring
idempotent_replayboolean
intake_form
missingarray
notifiedstring
outcomestringyes
payment_urlstring
policy_feestring
policy_messagestring
provider_namestring
reasonstring
request_idstring
retry_after_secinteger
service_namestring
start_isostring
status_reasonstring

No examples provided.

create_booking ~291

Creates one guest booking for an exact service, provider and ISO-8601 start time after explicit user confirmation. Reusing idempotency_key makes retries safe. Kirah accepts no payment credentials through MCP; a deposit-required service may return a Kirah-hosted human payment continuation, but this call transfers no funds.

NameTypeReqDescription
agent_metadataobject
clientobjectyes
idempotency_keystring
intake_responsesobjectAnswers to the service's intake form (2.8), keyed by intake field id as advertised in list_services' service.intake_form.fields[].id. FLAT only: values must be a string, a boolean, or a finite number…
provider_idstring
service_idstringyes
start_isostringyes
tenantstringyesThe tenant to operate on: the provider.tenant_slug value from the tenant's /.well-known/kirah.json manifest (the tenant's full domain, e.g. <slug>.kirah.ai).
NameTypeReqDescription
already_cancelledboolean
appointment_idstring
booking_refstring
booking_urlstring
cancel_fee_centsinteger
confirmationobject
demoboolean
demo_noticestring
deposit_centsinteger
detailstring
end_isostring
grantstring
idempotent_replayboolean
intake_form
missingarray
notifiedstring
outcomestringyes
payment_urlstring
policy_feestring
policy_messagestring
provider_namestring
reasonstring
request_idstring
retry_after_secinteger
service_namestring
start_isostring
status_reasonstring

No examples provided.

find_available_services ~410

Checks up to five top matching eligible Kirah businesses for earliest current availability within an exact ISO-8601 window of up to 14 days. Returns checked status and a partial-coverage flag.

NameTypeReqDescription
candidate_limitintegerHow many top-matching businesses get LIVE availability checks (invalid_candidate_limit outside 1-5). This bounds the whole fan-out: businesses beyond it are never touched, and partial:true says so.
earliest_afterstringExact ISO 8601 instant the window opens (default: now). Natural-language times are rejected (invalid_earliest_after).
earliest_beforestringExact ISO 8601 instant the window closes (default: earliest_after + 14 days). Must be after earliest_after and at most 14 days after it (invalid_earliest_before).
include_demobooleanBack-compat alias: true is equivalent to tenant_mode 'include_demos' and false to 'real_only'. When omitted, tenant_mode defaults to include_demos. Every demo candidate carries demo:true and a demo_n…
locationstringOptional place text ('City, ST', ZIP, bare city/state) OR explicit coordinates 'lat,lng' — identical semantics to search_businesses.location.
max_price_centsintegerOnly candidate services with a parseable price at or under this amount are considered.
querystringyesThe consumer's service need in plain words — identical semantics to search_businesses.query.
radius_milesintegerRadius in miles (default 25) — operative when the location resolves to coordinates (2.6 semantics).
tenant_modestringThe authoritative demo eligibility filter, with the same semantics as search_businesses. include_demos is the default and returns real and demo candidates; real_only excludes demos; demos_only return…

Structured output declared, but exposes no named fields.

No examples provided.

get_availability ~119

Returns current open times for one exact service and optional provider over a YYYY-MM-DD range of up to 31 days, with at most 20 rows. Approval-mode times are preferences rather than holds.

NameTypeReqDescription
date_rangeobjectyes
provider_idstring
service_idstringyes
tenantstringyesThe tenant to operate on: the provider.tenant_slug value from the tenant's /.well-known/kirah.json manifest (the tenant's full domain, e.g. <slug>.kirah.ai).

Structured output declared, but exposes no named fields.

No examples provided.

get_booking_status ~157

Returns the current status, time, service and provider for one grant-authorized booking reference. Client contact details and intake responses are excluded.

NameTypeReqDescription
booking_refstringyesThe reference create_booking returned (its idempotency key). Tampered, unrelated, cross-tenant or never-committed references answer one indistinguishable booking_not_found.
grantstringThe booking-bound capability token returned by create_booking. It must match this tenant and booking_ref and remain unexpired and unrevoked.
tenantstringyesThe tenant to operate on: the provider.tenant_slug value from the tenant's /.well-known/kirah.json manifest (the tenant's full domain, e.g. <slug>.kirah.ai).

Structured output declared, but exposes no named fields.

No examples provided.

get_reschedule_options ~435

Returns up to five real alternate times and the current fee or approval consequences for one grant-authorized booking. It does not hold, move or cancel the appointment.

NameTypeReqDescription
booking_refstringyesThe reference create_booking returned (its idempotency key). It must be the SAME booking the supplied grant was issued for; a mismatch answers invalid_grant, indistinguishably from a forged grant.
earlieststringOptional exact ISO 8601 instant — the earliest replacement time to consider. Default: now + 2 hours (a slot the customer cannot physically reach is not an option). Natural-language times are not acce…
grantstringyesThe capability token from this booking's create_booking response (confirmation.grant). Required: without it there is no way to establish that you are the agent that made this booking. Tampered, wrong…
lateststringOptional exact ISO 8601 instant — the latest replacement time to consider. Default: now + 14 days. Must be after `earliest` and at most 31 days after it; anything else answers invalid_latest. Supply…
limitintegerHow many options to return. Default 2, hard maximum 5; a larger value is CLAMPED to 5 rather than rejected. The ceiling is deliberate: the primary consumer is a voice agent reading options aloud, and…
tenantstringyesThe tenant to operate on: the provider.tenant_slug value from the tenant's /.well-known/kirah.json manifest (the tenant's full domain, e.g. <slug>.kirah.ai).

Structured output declared, but exposes no named fields.

No examples provided.

list_services ~84

Returns one published Kirah business catalog with current services, providers, timezone, prices, durations, deposit requirements, intake-question definitions and derived booking capabilities.

NameTypeReqDescription
tenantstringyesThe tenant to operate on: the provider.tenant_slug value from the tenant's /.well-known/kirah.json manifest (the tenant's full domain, e.g. <slug>.kirah.ai).

Structured output declared, but exposes no named fields.

No examples provided.

reschedule_booking ~572

Atomically moves one grant-authorized booking to a real open time after explicit user confirmation. Reusing idempotency_key makes retries safe. Failure leaves the original booking unchanged; success returns a rotated grant.

NameTypeReqDescription
agent_metadataobject
booking_refstringyesThe reference create_booking returned for the booking you want to MOVE. It must be the SAME booking the supplied grant was issued for; a mismatch answers invalid_grant, indistinguishably from a forge…
grantstringyesThe capability token from this booking's create_booking response (confirmation.grant). Required: without it there is no way to establish that you are the agent that made this booking. It must carry t…
idempotency_keystringyesREQUIRED — unlike create_booking, this action cannot derive one, because "move booking X to time T" is byte-identical whether it is a retry or a deliberate second move. Omitting it answers missing_id…
provider_idstringOPTIONAL. Move the booking to a different provider. Omit it and the booking keeps the provider it is already on — the customer booked a person, not a room. An explicit provider is honored only when t…
start_isostringyesThe exact ISO 8601 instant to move the appointment to. Natural-language times are not accepted. You may supply it DIRECTLY — calling get_reschedule_options first is optional, not required — because t…
tenantstringyesThe tenant to operate on: the provider.tenant_slug value from the tenant's /.well-known/kirah.json manifest (the tenant's full domain, e.g. <slug>.kirah.ai).
NameTypeReqDescription
already_cancelledboolean
appointment_idstring
booking_refstring
booking_urlstring
cancel_fee_centsinteger
confirmationobject
demoboolean
demo_noticestring
deposit_centsinteger
detailstring
end_isostring
grantstring
idempotent_replayboolean
intake_form
missingarray
notifiedstring
outcomestringyes
payment_urlstring
policy_feestring
policy_messagestring
provider_namestring
reasonstring
request_idstring
retry_after_secinteger
service_namestring
start_isostring
status_reasonstring

No examples provided.

search_businesses ~500

Searches Kirah's eligible public business directory by service need or exact Kirah Agent Address, with optional coarse location, price and demo-mode filters. Demo results are explicitly labeled.

NameTypeReqDescription
agent_addressstringExact public locator `<handle>@kirah.ai`; case-insensitive ASCII only. A locator, never authentication or owner authority. Reserved, malformed, unlisted, disabled, non-bookable, and tenant_mode-ineli…
cursorstringOpaque next_cursor value from a previous search_businesses response with the SAME query/filters: resumes after that tenant in the stable ordering. A cursor that does not decode, or that names a tenan…
include_demobooleanBack-compat alias: true is equivalent to tenant_mode 'include_demos' and false to 'real_only'. When omitted, tenant_mode defaults to include_demos. Every demo result carries demo:true and a demo_noti…
limitinteger
locationstringOptional place text ('City, ST', ZIP, bare city/state) OR explicit coordinates 'lat,lng'. With resolvable coordinates, radius_miles applies as real distance; otherwise matching is city/ZIP/metro-mark…
max_price_centsintegerOnly services with a parseable price at or under this amount are returned; unpriced services are excluded when this is set.
querystringThe consumer's need in plain words (e.g. 'lower back tightness', 'prenatal massage'). Matched deterministically against real service catalogs, expanded by the discovery ontology.
radius_milesintegerRadius in miles (default 25) — OPERATIVE when the location resolves to coordinates (2.6); otherwise answered with a truthful distance_note instead of a fabricated distance.
tenant_modestringThe authoritative eligibility filter for demo tenants. include_demos (default) returns real and demo businesses together; every demo is flagged demo:true and carries a clear notice. real_only exclude…

Structured output declared, but exposes no named fields.

No examples provided.

search_services ~95

Ranks up to five services in one published Kirah business catalog against a short free-text query. Returns catalog-grounded candidate identifiers, names, scores and match evidence.

NameTypeReqDescription
querystringyes
tenantstringyesThe tenant to operate on: the provider.tenant_slug value from the tenant's /.well-known/kirah.json manifest (the tenant's full domain, e.g. <slug>.kirah.ai).

Structured output declared, but exposes no named fields.

No examples provided.

Common questions

What is the Kirah Local Services MCP server?

Kirah Local Services is an MCP server listed in the public MCP registry as io.github.kirubel/kirah-local-services. Discover local services and availability, then create, track, reschedule, or cancel bookings. This page covers its hosted endpoint (https://kirah.ai/api/mcp-registry-v1).

Is the Kirah Local Services MCP server safe to use?

Kirah Local Services scores 75 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 Kirah Local Services MCP server expose?

Kirah Local Services exposes 10 tools: list_services, search_services, get_availability, search_businesses, find_available_services, and 5 more. Their descriptions and schemas cost roughly 3,016 tokens of context every time the server is loaded.

Does the Kirah Local Services MCP server require authentication?

No. We connected to Kirah Local Services without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Kirah Local Services MCP server still maintained?

Kirah Local Services is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.