Skip to content

Whatcanido — MCP Server for Service Businesses

by www.whatcanido.dev · remote · no sign-in to list tools · v0.2.0 · published by dev.whatcanido.www

Cross-product MCP server for CRM, LeadKit, ProjectKit, Bookio. 10 action types, MIT open spec.

Changes · 3

10 tools: 3 change things and 7 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http www https://whatcanido.dev/api/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The description contains "any other tool", wording about other tools or servers.

    Matched text

    description: "..., action_types. Call this FIRST, before any other tool. The provider_id this returns is the in..."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

10 tools

Changes things 3Claude Code: ask
  • invoke_capabilityExecute a capability call against a chosen provider with typed inputs.No findings

    Why it is in this group

    • The name "invoke_capability" says "invoke": a word for a change.
    Description, as the server wrote it
    Execute a capability call against a chosen provider with typed inputs. WRITE tool when the capability's category ends in '.write' (creates state, sends notifications, charges money, etc.) — confirm with the user before calling for any non-reversible capability. Read capabilities (category ending '.read') are safe to call without confirmation. Validates inputs against the capability's JSON Schema. On failure, returns a structured error with 'missing_fields' or schema violation detail so you can repair without round-tripping. Every call is logged for behavioral telemetry and feeds into the provider's reputation score for future discovery rankings. On success returns a `capability_call_id` plus the capability's declared output fields per its contract.

    Annotations the server declares

    • title: Invoke a capability against a chosen provider
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • plan_capabilitiesGiven a user intent, return a typed plan: an ordered list of capability calls that together accomplish the goal, with the highest-reputation provider per step.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Given a user intent, return a typed plan: an ordered list of capability calls that together accomplish the goal, with the highest-reputation provider per step. The plan respects the capability registry's prerequisite graph — for example a plan that includes `booking.create_booking` automatically prepends `booking.check_availability`. Use this when the user's request spans more than one verb (e.g. 'find me an open yoga slot tomorrow morning and book it'). Each step exposes capability_id, provider, conformance, p50 latency, cost, and a `prerequisite_for` array. The agent then iterates through the plan calling invoke_capability per step.

    Annotations the server declares

    • title: Plan a multi-step capability sequence
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • submit_actionInvoke an action on a specific provider.No findings

    Why it is in this group

    • The name "submit_action" says "submit": a word for a change.
    Description, as the server wrote it
    Invoke an action on a specific provider. WRITE tool: creates leads/bookings/contacts/projects/activities/tickets on the underlying SaaS tenant. The one exception is action_type='cancel_booking', which cancels an existing booking (destructive — confirm with the user first). Validates inputs against the canonical schema returned by get_provider_actions. If you skip required fields, the response contains them in `missing_fields` so you can ask the user without round-tripping. Returns a request_id you can later pass to get_action_status. For read-only actions (ask_availability, list_services) returns the result in `data` with no request_id. Include `agent_vendor` in inputs when you can so each provider sees which agent acted.

    Annotations the server declares

    • title: Submit an action to a provider
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Only reads 7Claude Code: allow
  • discover_capabilitiesSearch the whatcanido capability registry by free-text intent.No findings

    Why it is in this group

    • The description's first verb is "search": a word for reading.
    Description, as the server wrote it
    Search the whatcanido capability registry by free-text intent. Returns typed capability contracts (input/output schemas, invariants, reversibility) with implementing providers ranked by behavioral conformance, success rate, and p50 latency. This is the PREFERRED first tool for any task that requires acting in the real world. Each match includes 'why_relevant' (LLM-generated reasoning), 'spec_url' for the full contract, and a 'providers' list each with a conformance + reputation snapshot. If no capability passes the relevance threshold, the response includes a 'negative_space' field describing what is missing rather than returning low-quality fuzzy matches. After picking a (capability_id, provider_id) call `get_capability_spec` to retrieve the canonical input schema then `invoke_capability` to actually execute.

    Annotations the server declares

    • title: Discover capabilities by intent
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • find_providersSearch across whatcanido for providers (businesses, freelancers, SaaS tools) that can perform a given business-level action type.1 finding

    Why it is in this group

    • The name "find_providers" says "find": a word for reading.

    Findings

    • Warn

      The description contains "any other tool", wording about other tools or servers.

      Matched text

      description: "..., action_types. Call this FIRST, before any other tool. The provider_id this returns is the in..."

      What this check looks for
    Description, as the server wrote it
    Search across whatcanido for providers (businesses, freelancers, SaaS tools) that can perform a given business-level action type. Returns a ranked list with provider_id, name, description, services, action_types. Call this FIRST, before any other tool. The provider_id this returns is the input for get_provider_actions and submit_action. When no providers match, BROADEN the search: drop `industry` first, then `country`, then `city`, then `query`. Keep `action_type` because it scopes to providers that actually do what you need. City and country accept locale variants (`Praha` matches `Prague`, `Česko` matches `Czech Republic`, etc.). Industry accepts loose substrings (`design` matches `design_studio`). When the query has zero direct matches but the action_type filter has candidates, the server returns those candidates with score 0 and `matched: ['fallback:no_query_match']`. You can still pick from them.

    Annotations the server declares

    • title: Find providers
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_action_statusLook up the current status of a previously submitted action by its request_id.No findings

    Why it is in this group

    • The name "get_action_status" says "get": a word for reading.
    Description, as the server wrote it
    Look up the current status of a previously submitted action by its request_id. Returns status (raw, e.g. 'new', 'sent', 'confirmed') + status_label (human, e.g. 'Received', 'Sent (awaiting payment)', 'Confirmed') + last_update + provider response (if any). Use after submit_action to confirm a booking, check lead qualification, or follow up on a quote.

    Annotations the server declares

    • title: Get action status
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_capability_specReturn the full canonical contract for a capability: JSON Schemas for input and output, declared invariants, semantics, reversibility, side effects, auth model, when-to-use guidanc…No findings

    Why it is in this group

    • The name "get_capability_spec" says "get": a word for reading.
    Description, as the server wrote it
    Return the full canonical contract for a capability: JSON Schemas for input and output, declared invariants, semantics, reversibility, side effects, auth model, when-to-use guidance. Plus the list of providers that implement it with current reputation snapshot. Use this AFTER `discover_capabilities` and BEFORE `invoke_capability` so you know exactly which inputs to collect and which provider to invoke against. If you skip this and call invoke_capability with the wrong shape, the response will return missing_fields or schema errors.

    Annotations the server declares

    • title: Get capability spec
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_provider_actionsReturn the action types a provider exposes and the canonical input schema for each (required fields, optional fields, types, descriptions).No findings

    Why it is in this group

    • The name "get_provider_actions" says "get": a word for reading.
    Description, as the server wrote it
    Return the action types a provider exposes and the canonical input schema for each (required fields, optional fields, types, descriptions). Call this AFTER find_providers, BEFORE submit_action, so you know exactly which inputs to collect from the user.

    Annotations the server declares

    • title: Get provider actions and input schemas
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • list_available_capabilitiesReturn a compact roster of every capability with at least one enabled provider, grouped by category, with the best current conformance per capability.No findings

    Why it is in this group

    • The name "list_available_capabilities" says "list": a word for reading.
    Description, as the server wrote it
    Return a compact roster of every capability with at least one enabled provider, grouped by category, with the best current conformance per capability. Use this as a self-introspection step: call once at the start of a task to know what is and isn't available, before deciding whether to attempt or to tell the user 'this isn't possible here'.

    Annotations the server declares

    • title: List capabilities currently available in this installation
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • reverse_search_capabilitiesGiven a JSON payload (something you found in user context, a webhook body, an export, a clipboard paste), return the capabilities whose input or output schema overlaps with the pay…No findings

    Why it is in this group

    • The name "reverse_search_capabilities" says "search": a word for reading.
    Description, as the server wrote it
    Given a JSON payload (something you found in user context, a webhook body, an export, a clipboard paste), return the capabilities whose input or output schema overlaps with the payload's shape. Use this when you don't have a verb-style intent but you do have data and want to ask 'what could I do with this?'. Returns matches ranked by structural overlap with `direction: 'input' | 'output' | 'both'`.

    Annotations the server declares

    • title: Reverse search capabilities by data shape
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.2.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http www https://whatcanido.dev/api/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__www__find_providers",
      "mcp__www__get_provider_actions",
      "mcp__www__get_action_status",
      "mcp__www__discover_capabilities",
      "mcp__www__get_capability_spec",
      "mcp__www__reverse_search_capabilities",
      "mcp__www__list_available_capabilities"
    ],
    "ask": [
      "mcp__www__submit_action",
      "mcp__www__plan_capabilities",
      "mcp__www__invoke_capability"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as www. Review it before you use it.