Koskamo

Book It MCP

A remote MCP server that allows AI assistants to find local home-service and trade businesses by trade and ZIP code, display their self-set price ranges and availability windows, and send booking requests that the business confirms directly.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Book It MCP logo, by Modern Mustard SeedVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Modern Mustard Seed
You need:No account or sign-in is needed to use it.
MCP endpoint (Streamable HTTP)
https://book.modernmustardseed.com/mcp
Vendor documentation

What you can do with it

  • Find local furnace repair businesses in a specific ZIP code
  • Check price ranges for roof repair services
  • Send a booking request to a plumber for a leaking water heater
  • View availability windows for a specific trade business

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
Book It by Modern Mustard Seed 1.0.0
MCP protocol
2025-06-18
Tools
5 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Book It lists local home-service and trade businesses that enrolled themselves: their services, the price ranges they entered, the ZIPs they serve and the windows they take work. find_provider lists enrolled businesses for a trade and ZIP. get_services returns one business's services, ranges, area and hours. quote_range returns the range a business entered for one service, or says it has none; Book It never estimates a price. check_availability returns the windows a business accepts requests for. request_booking sends a business a booking request that the business confirms itself; it is never a confirmed appointment, and it is sent only after the person agrees to the consent text.

Tools

5 advertised

find_provider — Find a local provider
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find home-service and trade businesses enrolled in Book It that serve a US ZIP code for a trade, such as HVAC, plumbing, roofing or lawn care. Returns each business's name, phone, website, the services that match the stated need, and its next open request window. Only businesses that enrolled and list that ZIP in their own service area appear; the result states the ordering rule, which is a fair daily rotation and never paid placement. An empty list means no enrolled business covers that trade and ZIP yet.

find_provider input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "trade",
    "zip"
  ],
  "properties": {
    "zip": {
      "type": "string",
      "pattern": "^\\d{5}$",
      "description": "The 5-digit US ZIP code where the work is."
    },
    "need": {
      "type": "string",
      "maxLength": 300,
      "description": "What the person needs in a few words, such as \"furnace blowing cold air\". Used to surface matching services."
    },
    "trade": {
      "type": "string",
      "maxLength": 80,
      "minLength": 2,
      "description": "The trade or a common name for it: \"hvac\", \"furnace repair\", \"plumber\", \"roofer\", \"lawn care\", \"tree service\"."
    }
  }
}
find_provider annotations
{
  "title": "Find a local provider",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_services — Get a business's services
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one Book It business's services with any price range the business entered, its service-area ZIPs, its weekly hours for requests, its next open window, and the consent text a person agrees to before a booking request is sent.

get_services input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "business_id"
  ],
  "properties": {
    "business_id": {
      "type": "string",
      "maxLength": 80,
      "minLength": 3,
      "description": "The business_id exactly as find_provider returned it, such as \"juniper-ridge-roofing\"."
    }
  }
}
get_services annotations
{
  "title": "Get a business's services",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
quote_range — Get a business's price range
Advertised by the server during the last successful anonymous check.
Advertised read-only

Return the price range a Book It business entered for one of its services, labelled as the business's own range and not a quote. When the business entered no range, says so. Book It never estimates, averages or invents a price.

quote_range input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "business_id"
  ],
  "properties": {
    "service": {
      "type": "string",
      "maxLength": 80,
      "description": "Instead of service_id, the service name as the business lists it, such as \"Furnace repair\"."
    },
    "service_id": {
      "type": "string",
      "maxLength": 40,
      "description": "The service_id from get_services or find_provider."
    },
    "business_id": {
      "type": "string",
      "maxLength": 80,
      "minLength": 3,
      "description": "The business_id exactly as find_provider returned it, such as \"juniper-ridge-roofing\"."
    }
  }
}
quote_range annotations
{
  "title": "Get a business's price range",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_availability — Check request windows
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the windows a Book It business accepts booking requests for, by date in the business's time zone, after its minimum notice and without its days off, for up to 14 days at a time. Each window has a window_id for request_booking. A window is when the business says it can take work, not a confirmed slot.

check_availability input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "business_id"
  ],
  "properties": {
    "days": {
      "type": "integer",
      "maximum": 14,
      "minimum": 1,
      "description": "How many days to show, 1 to 14. Defaults to 7."
    },
    "from_date": {
      "type": "string",
      "maxLength": 10,
      "description": "First date to show, YYYY-MM-DD, in the business's time zone. Defaults to today there."
    },
    "business_id": {
      "type": "string",
      "maxLength": 80,
      "minLength": 3,
      "description": "The business_id exactly as find_provider returned it, such as \"juniper-ridge-roofing\"."
    }
  }
}
check_availability annotations
{
  "title": "Check request windows",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
request_booking — Send a booking request
Advertised by the server during the last successful anonymous check.
Open-world

Send a Book It business a booking request on a person's behalf. Collects only the person's name, phone, ZIP, what they need and a preferred time. The business receives it by email and in its inbox and confirms a time with the person directly; the request is never a confirmed appointment. Requires consent_confirmed true, which means the person read and agreed to the business's booking_consent_text (from get_services or check_availability). US and Canadian phone numbers only. A repeat request from the same phone to the same business within 24 hours returns the first request instead of sending another.

request_booking input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "business_id",
    "customer_name",
    "customer_phone",
    "customer_zip",
    "need",
    "consent_confirmed"
  ],
  "properties": {
    "need": {
      "type": "string",
      "maxLength": 600,
      "minLength": 5,
      "description": "What the person needs, in their words, such as \"Furnace runs but blows cold air.\""
    },
    "service_id": {
      "type": "string",
      "maxLength": 40,
      "description": "Optional service_id from get_services."
    },
    "business_id": {
      "type": "string",
      "maxLength": 80,
      "minLength": 3,
      "description": "The business_id exactly as find_provider returned it, such as \"juniper-ridge-roofing\"."
    },
    "customer_zip": {
      "type": "string",
      "pattern": "^\\d{5}$",
      "description": "The 5-digit ZIP where the work is. It must be in the business's service area."
    },
    "customer_name": {
      "type": "string",
      "maxLength": 80,
      "minLength": 2,
      "description": "The person's name, at least a first name."
    },
    "customer_phone": {
      "type": "string",
      "maxLength": 25,
      "minLength": 10,
      "description": "A US or Canadian phone number the business can call or text, such as (406) 555-0123."
    },
    "consent_confirmed": {
      "type": "boolean",
      "description": "True only after the person read the business's booking_consent_text and agreed to it."
    },
    "preferred_time_note": {
      "type": "string",
      "maxLength": 120,
      "description": "A short preferred time in words, such as \"any weekday morning\", when no window fits."
    },
    "preferred_window_id": {
      "type": "string",
      "maxLength": 40,
      "description": "A window_id from check_availability, such as \"2026-10-15@08:00-12:00\"."
    }
  }
}
request_booking annotations
{
  "title": "Send a booking request",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1406 ms
95th percentile latency
1406 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1406 ms · metadata changed · 5 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http book-it-mcp https://book.modernmustardseed.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add book-it-mcp --url https://book.modernmustardseed.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable book-it-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "book-it-mcp": {
      "url": "https://book.modernmustardseed.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "book-it-mcp": {
      "type": "streamableHttp",
      "url": "https://book.modernmustardseed.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start book-it-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "book-it-mcp": {
      "type": "http",
      "url": "https://book.modernmustardseed.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http book-it-mcp https://book.modernmustardseed.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "book-it-mcp": {
      "url": "https://book.modernmustardseed.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "book-it-mcp": {
      "serverUrl": "https://book.modernmustardseed.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Book It MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Book It MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing