# Canopy by Copp Oak (remote · canopy-mcp-production.up.railway.app)

Book local service pros from your AI assistant: real availability, instant booking, easy cancels.

- Trust score: 63/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `canopy-mcp-production.up.railway.app`: 63/100 (this document), [markdown](https://verifymcp.io/servers/com-coppoak-canopy/mcp-public.md), [page](https://verifymcp.io/servers/com-coppoak-canopy/mcp-public)

## Channel facts

- Endpoint: `https://canopy-mcp-production.up.railway.app/mcp/public`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.0`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 11/100
  - TLS not yet verified: we couldn't open a connection to check the certificate.
  - Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS not yet verified: we couldn't read the response headers to check for it.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but we couldn't connect to verify it.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Tool Safety**: 0/100
  - Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 5 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the Canopy by Copp Oak MCP server?

Canopy by Copp Oak is a hosted endpoint at https://canopy-mcp-production.up.railway.app/mcp/public, 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.

### Claude

```bash
claude mcp add --transport http com-coppoak-canopy 'https://canopy-mcp-production.up.railway.app/mcp/public'
```

### Cursor

```json
{
  "mcpServers": {
    "com-coppoak-canopy": {
      "url": "https://canopy-mcp-production.up.railway.app/mcp/public"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-coppoak-canopy": {
      "type": "http",
      "url": "https://canopy-mcp-production.up.railway.app/mcp/public"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-coppoak-canopy]
url = "https://canopy-mcp-production.up.railway.app/mcp/public"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-coppoak-canopy": {
      "type": "remote",
      "url": "https://canopy-mcp-production.up.railway.app/mcp/public",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-coppoak-canopy --url 'https://canopy-mcp-production.up.railway.app/mcp/public' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-coppoak-canopy:
    url: "https://canopy-mcp-production.up.railway.app/mcp/public"
```

### Netclaw

```json
{
  "McpServers": {
    "com-coppoak-canopy": {
      "Transport": "http",
      "Url": "https://canopy-mcp-production.up.railway.app/mcp/public"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-coppoak-canopy -t streamable-http -u 'https://canopy-mcp-production.up.railway.app/mcp/public'
```

### Other

```json
{
  "mcpServers": {
    "com-coppoak-canopy": {
      "type": "http",
      "url": "https://canopy-mcp-production.up.railway.app/mcp/public"
    }
  }
}
```

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

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 63, 0)

- [security regression] Endpoint reachability: reachable → unreachable
- [security regression] Authorization: fail → unverified
- [security regression] HSTS header: fail → unverified
- [security regression] Tool safety: pass → unverified
- [security regression] TLS certificate: pass → unverified
- [security regression] Stability: 0.03 → unverified
- [security regression] Transport: pass → fail
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-11-03 (score 63, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-11-02 (score 63)

First indexed and scored.

## MCP tools (10)

### `canopy_check_bookable` (~96 tokens)

Check which businesses are bookable

Given businesses you already found for the user (name plus phone, website or address), report which ones can be booked through Canopy and how (booking_mode). Results come back in exactly the order you sent them. Canopy never ranks, filters or recommends businesses. Results are returned in the same order as the input.

Input parameters:

- `businesses` (array, required): 1 to 50 businesses, in your order. Results keep this order.

### `resolve_business` (~154 tokens)

Look up one business on Canopy

Match one business the user named to its Canopy listing, by phone, website, or name (add the city, state or ZIP code when you know it). Returns at most one match, with its booking_mode and locations, or found=false. When a name alone is not certain, found=false comes with up to 5 candidates in alphabetical order for the user to choose from.

Input parameters:

- `address` (object): City, state and ZIP code of the business.
- `business_name` (string): Business name as you found it. With no phone or website, add the address city, state or ZIP when known.
- `phone` (string): Business phone number.
- `website` (string): Business website URL or domain.

### `get_availability` (~219 tokens)

Get open appointment times

List open appointment slots for a Canopy business, optionally for one service and one location, between two dates. Slots are cached from the business calendar (see synced_at); the time is re-checked live when you book.

Input parameters:

- `customer_zip` (string): Customer's ZIP code, if known. For a business with several locations, Canopy uses the location nearest to it unless location_id (or a slot or service tied to one location) decides. The result names t…
- `from_date` (string): First day, YYYY-MM-DD. Default: today.
- `location_id` (string): Location for multi-location businesses.
- `operator_id` (string, required): operator_id from canopy_check_bookable or resolve_business.
- `service_id` (string): Only slots for this service.
- `timezone` (string): IANA time zone for dates and returned times.
- `to_date` (string): Last day (inclusive), YYYY-MM-DD, at most 31 days after from_date. Default: 13 days after from_date.

### `request_booking` (~316 tokens)

Start a booking

Start a booking with a Canopy-connected business. Canopy automatically routes to the correct flow based on the operator's booking mode: auto-confirm (booked right away in the business's calendar; the customer is emailed a confirmation), request-times (propose preferred times), or submission-only (callback request). Summarize the booking and get the customer's go-ahead before calling.

Input parameters:

- `agent_callback_url` (string): Optional HTTPS URL that receives a webhook when the business responds.
- `customer` (object, required): The customer the appointment or callback is for.
- `customer_zip` (string): Customer's ZIP code, if known. For a business with several locations, Canopy uses the location nearest to it unless location_id (or a slot or service tied to one location) decides. The result names t…
- `idempotency_key` (string): Optional. Reuse the same key when retrying so nothing is created twice. Derived automatically if omitted.
- `location_id` (string): Location for multi-location businesses.
- `notes` (string): Extra details for the business (added to the customer notes).
- `operator_id` (string, required): operator_id from canopy_check_bookable or resolve_business.
- `preferred_times` (array): 1 to 3 preferred time windows (businesses that review requests).
- `service_id` (string): Service to book (from get_availability). Needed for instant-confirm and preferred-times businesses.
- `slot_id` (string): Open slot from get_availability (instant-confirm businesses).

### `propose_times` (~264 tokens)

Propose preferred times

Propose preferred times to a business that reviews booking requests. The business will approve one time (that books it; the customer is emailed a confirmation) or propose an alternative (the customer confirms it from an emailed code). Check status with get_request_status.

Input parameters:

- `agent_callback_url` (string): Optional HTTPS URL that receives a webhook when the business responds.
- `customer` (object, required): The customer the appointment or callback is for.
- `customer_zip` (string): Customer's ZIP code, if known. For a business with several locations, Canopy uses the location nearest to it unless location_id (or a slot or service tied to one location) decides. The result names t…
- `idempotency_key` (string): Optional. Reuse the same key when retrying so nothing is created twice. Derived automatically if omitted.
- `location_id` (string): Location for multi-location businesses.
- `notes` (string): Extra details for the business (added to the customer notes).
- `operator_id` (string, required): operator_id from canopy_check_bookable or resolve_business.
- `preferred_times` (array, required): 1 to 3 preferred time windows, in order of preference.
- `service_id` (string, required): Service the customer wants (from get_availability).

### `request_callback` (~212 tokens)

Request a callback

Request a callback from a business. They will contact the customer directly. No calendar booking is created.

Input parameters:

- `agent_callback_url` (string): Optional HTTPS URL that receives a webhook when the business responds.
- `customer` (object, required): The customer the appointment or callback is for.
- `customer_zip` (string): Customer's ZIP code, if known. For a business with several locations, Canopy uses the location nearest to it unless location_id (or a slot or service tied to one location) decides. The result names t…
- `idempotency_key` (string): Optional. Reuse the same key when retrying so nothing is created twice. Derived automatically if omitted.
- `location_id` (string): Location for multi-location businesses.
- `notes` (string): Extra details for the business (added to the customer notes).
- `operator_id` (string, required): operator_id from canopy_check_bookable or resolve_business.
- `service_id` (string): Service the customer is asking about, if known.

### `get_request_status` (~91 tokens)

Check a booking request

Check the status of a booking request (preferred times or callback). Returns pending, approved, rejected, counter_proposed, expired, or converted. Needs the manage_token that came back when the request was made.

Input parameters:

- `manage_token` (string, required): manage_token returned with that request_id when the request was created.
- `request_id` (string, required): request_id returned by request_booking, propose_times or request_callback.

### `reschedule_booking` (~215 tokens)

Ask to move a booking to another time

Ask to move a booking the customer already confirmed (booked with the business) to another open slot of the same service and location (slot_id from get_availability). Nothing moves right away: Canopy emails the customer a link to approve the new time, and the business calendar changes only after they approve. A hold the customer has not confirmed yet cannot be moved. Calling again with the same slot_id reports whether it was approved. Needs the manage_token that came back with the booking_id.

Input parameters:

- `booking_id` (string, required): booking_id of the confirmed booking to move (from request_booking or get_request_status).
- `manage_token` (string, required): manage_token returned with that booking_id (by request_booking when the booking was created, or as booking_manage_token by get_request_status).
- `reason` (string): Short reason for the move, if the customer gave one.
- `slot_id` (string, required): The new open slot (from get_availability, same service and location). The customer must approve the move by email.

### `cancel_booking` (~143 tokens)

Cancel a booking

Cancel a booking made through Canopy. The appointment is called off in the business's calendar right away and the customer is emailed. This cannot be undone: confirm with the customer before calling. An appointment that has already started cannot be cancelled here. Needs the manage_token that came back with the booking_id.

Input parameters:

- `booking_id` (string, required): booking_id of the booking to cancel (from request_booking or get_request_status).
- `manage_token` (string, required): manage_token returned with that booking_id (by request_booking when the booking was created, or as booking_manage_token by get_request_status).
- `reason` (string): Short reason for cancelling, if the customer gave one.

### `get_business_terms` (~95 tokens)

Get a business's prices and terms

Get the prices of a Canopy business's bookable services, its fees and its cancellation terms, exactly as the business has them on file. Anything the business has not put on file comes back as on_file=false: tell the customer it is not on file (they can ask the business) and never estimate or fill in a value.

Input parameters:

- `operator_id` (string, required): operator_id from canopy_check_bookable or resolve_business.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-coppoak-canopy/mcp-public#diagnostics

## Score history

- 2026-11-05: 63
- 2026-11-04: 63
- 2026-11-03: 63
- 2026-11-02: 63

## Common questions

### What is the Canopy by Copp Oak MCP server?

Canopy by Copp Oak is an MCP server listed in the public MCP registry as com.coppoak/canopy. Book local service pros from your AI assistant: real availability, instant booking, easy cancels. This page covers its hosted endpoint (https://canopy-mcp-production.up.railway.app/mcp/public).

### Is the Canopy by Copp Oak MCP server safe to use?

Canopy by Copp Oak scores 63 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 Canopy by Copp Oak MCP server expose?

Canopy by Copp Oak exposes 10 tools: canopy_check_bookable, resolve_business, get_availability, request_booking, propose_times, and 5 more. Their descriptions and schemas cost roughly 1,805 tokens of context every time the server is loaded.

### Does the Canopy by Copp Oak MCP server require authentication?

Its publisher declares no required credentials for Canopy by Copp Oak. We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.

### Is the Canopy by Copp Oak MCP server still maintained?

Canopy by Copp Oak is still listed in the MCP registry, though our most recent checks did not reach this channel. We last reached this channel on 3 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the Canopy by Copp Oak MCP server?

VerifyMCP ran 3 checks on Canopy by Copp Oak, covering HTTPS, DNSSEC and Transport. 8 items could not be completed, a gap on our side rather than a finding about Canopy by Copp Oak: TLS certificate, Authorization, HSTS header, Schema quality and 4 more. 5 categories score 0 for that reason, because we only credit what we can confirm. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://canopy-mcp-production.up.railway.app/mcp/public
- Website: https://coppoak.com/canopy/
- Changelog RSS feed: https://verifymcp.io/servers/com-coppoak-canopy/mcp-public.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-coppoak-canopy/mcp-public/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/com-coppoak-canopy/mcp-public.json
- HTML version of this page: https://verifymcp.io/servers/com-coppoak-canopy/mcp-public
