crowntowncompost-mcp
One-line summary: Manage your Crown Town Compost account in natural language — check pickups, invoices, and schedules, skip services, report missed pickups, update details, and contact support.
Verify connectivity/auth:
crowntown_healthcheck— confirms credentials work and reports account status with specific error kinds.View dashboard:
crowntown_get_dashboard— subscription, next service date, addresses/pickup days, environmental impact.Read account details:
crowntown_get_account— contact info and notification preferences.Update account:
crowntown_update_account— change phone, name, email reminders, service notifications (confirmation-gated).View service history:
crowntown_list_service_history— past stops, filterable by outcome, paginated.View upcoming services:
crowntown_list_upcoming_services— scheduled collection days with skip IDs.Get pickup schedule:
crowntown_get_pickup_schedule— pickup days, set-out-by time, observed arrival window per address.Skip/un-skip a service:
crowntown_skip_service— skip or restore an upcoming collection day (confirmation-gated).List invoices:
crowntown_list_invoices— billing history with amounts, status, Stripe links, paginated.Report missed pickup:
crowntown_report_missed_pickup— notify staff of a missed collection (confirmation-gated).Contact support:
crowntown_contact_support— send a message to customer support (confirmation-gated).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@crowntowncompost-mcp What day is my next compost pickup?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
crowntowncompost-mcp
MCP server for the Crown Town Compost customer portal — check your pickups, invoices, and upcoming collection days, skip a service, report a missed pickup, and update your account, all in natural language.
Developed and maintained by AI (Claude Code). Use at your own discretion.
What it talks to
crowntowncompost.com is a marketing site with no customer data. Everything lives at
portal.crowntowncompost.com, a Django app (a white-labeled StopSuite hauler platform).
This server authenticates server-side with a session cookie you already hold, or with your own
portal username and password — a normal form login that returns one — and reads the same pages and
JSON endpoints the website uses.
No browser extension, no bot-wall workaround, no third-party service in the middle.
Related MCP server: BillingServ MCP
Install
npm install -g crowntowncompost-mcpThen add it to your MCP host. Two configurations work — supply either a session cookie you already hold (nothing else needed), or the login pair so the server can mint one:
{
"mcpServers": {
"crowntowncompost": {
"command": "npx",
"args": ["-y", "crowntowncompost-mcp"],
"env": {
"CROWNTOWN_USERNAME": "you@example.com",
"CROWNTOWN_PASSWORD": "your-portal-password"
}
}
}
}To use a session cookie instead, set CROWNTOWN_SESSION_COOKIE to a Cookie
header value from a signed-in browser session (sessionid=…; csrftoken=…) and
leave the username and password unset. The portal login is then never run, and
no password is stored anywhere.
Setting both is also valid, and is the most robust configuration: the cookie is used first, and when the portal eventually expires it the login quietly mints a replacement. With a cookie alone, an expired session is reported as expired — the server says so plainly rather than claiming nothing is configured.
Locally you can instead copy .env.example to .env. The server boots without credentials (so a
host's install-time probe succeeds); the configuration error surfaces on the first tool call.
Tools
Reads
Tool | What it returns |
| Whether credentials work, plus account status; on failure |
| Account status, subscription (plan, price, renewal date), next service date, service addresses + pickup days, and your environmental impact |
| Contact details and notification preferences |
| Pickup day(s) and time window per address — the official set-out-by time plus an observed arrival window (earliest/latest/typical, consistent vs varies) derived from your collection history |
| Past collection stops — date, outcome, time, weight, services. Paginated; filter by |
| Upcoming collection days, each with the ids needed to skip it |
| Billing history with amounts, status, and Stripe payment links |
Writes (all confirmation-gated)
Tool | What it does |
| Skip or un-skip an upcoming collection day |
| Update contact details / notification preferences |
| Report that a collection was missed |
| Send a message to customer support |
Every mutating tool asks you to confirm before it writes anything. A client that can show a
confirmation prompt (Claude Code) gets that prompt (unless MCP_CONFIRM_ELICITATION=off). Elsewhere (claude.ai, Claude Desktop) the first
call sends nothing and returns status: "confirmation-required" with a preview of exactly what would
be sent plus a confirmToken; only a repeat call with the same arguments and that token proceeds.
The token works once, expires, and is refused (DRAFT_CHANGED) if what would be sent changed in
between — including values the tool reads first, such as the account form crowntown_update_account
re-saves or the reply-to email/phone the support form pre-fills. Where a re-read can prove the change
stuck (skips, account updates) the tool re-reads and reports verified; where it can't (support
messages, missed-pickup reports) it says so rather than claiming success.
Confirmations
variable | default | |
|
| What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). |
|
|
|
|
| How long a token stays valid. |
| random per process | Signing key; set it only if tokens must survive a server restart. |
Payments are deliberately out of scope — crowntown_list_invoices returns the hosted invoice URL for
you to open in a browser.
Without the MCP
The skills/crowntown-portal skill does the same things with curl in a shell — useful in scripts or
on a machine where this server isn't installed. It documents the Django CSRF handshake, both JSON
endpoints, and every write's field list.
Development
npm install
npm run build
npm testTests mock the network — no credentials needed and nothing hits the live portal. tests/server-boot.test.ts
spawns the real built artifacts (the npm bin and the bundle, the latter without node_modules) and runs
the MCP handshake against them.
Endpoint shapes are documented in docs/CROWNTOWN-API.md, including which
parts are live-verified and which are not.
License
MIT
Available Tools
11 toolscrowntown_contact_supportSend a message to customer supportADestructive
Send a message to Crown Town Compost customer support. The reply-to email and phone default to the ones the support form pre-fills from your account, and the preview shows the exact values that will be sent. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
Inputs: message (required), email, phone, confirmToken.
crowntown_get_accountGet account contact detailsARead-onlyIdempotent
Get your account contact details (first name, last name, phone) and notification preferences (email reminders, service notifications). Read-only — use crowntown_update_account to change them.
Inputs: view.
crowntown_get_dashboardGet account dashboard summaryARead-onlyIdempotent
Get your Crown Town Compost dashboard: account status, active subscription (plan, price, renewal date), next service date, service address(es) and their pickup day(s), and your composting environmental impact (lbs diverted, seedlings, miles offset, gallons of gas). Read-only.
Inputs: no named parameters.
crowntown_get_pickup_scheduleGet pickup schedule (days + time window)ARead-onlyIdempotent
Get the pickup schedule for each service address: pickup day(s), next service date, the official set-out-by time, and an observed arrival-time window (earliest/latest/typical and whether it is consistent or varies) derived from the recorded collection times in your service history. Crown Town Compost publishes no guaranteed arrival window, so the observed window is empirical. Read-only.
Inputs: history_sample.
crowntown_healthcheckVerify Crown Town Compost auth + connectivityARead-onlyIdempotent
Confirm credentials are configured, log in to the Crown Town Compost portal, fetch the dashboard, and report {authenticated, account_status, service_addresses}. On failure, error.kind says which hop broke: no_credential (nothing configured), credential_rejected (the portal refused the username/password), session_expired (a supplied session cookie is no longer honoured), edge_blocked (a CDN/WAF refused the request before the portal saw it, so the credentials were never judged), timeout, transport or http. Read-only; never returns the credentials.
Inputs: no named parameters.
crowntown_list_invoicesList billing history (invoices)ARead-onlyIdempotent
List your Crown Town Compost invoices — number, date, amount, status, whether payable, and links (Stripe PDF / receipt / hosted invoice page). Paginated. view "brief" answers one line per invoice instead ("Invoice — — ", inside the untrusted-data envelope) and lists only the payable invoices unless payable_only is false. Read-only.
Inputs: page, view, per_page, payable_only.
crowntown_list_service_historyList service history (pickups)ARead-onlyIdempotent
List past collection stops for your account — date, status (Success/Missing/Empty/Inaccessible/Unacceptable), collection time, weight, and services rendered. Paginated and filterable by status. Read-only.
Inputs: page, status, per_page.
crowntown_list_upcoming_servicesList upcoming (skippable) servicesARead-onlyIdempotent
List upcoming scheduled collection days from the service calendar, each with the identifiers needed to skip it (rid, clid), the service date, and whether it is currently scheduled or already skipped. view "brief" answers one line per day instead: "Compost pickup — — scheduled|skipped". Read-only — use crowntown_skip_service to actually skip/unskip.
Inputs: view.
crowntown_report_missed_pickupReport a missed pickupADestructive
Report that a scheduled collection was missed. This notifies Crown Town Compost staff. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
Inputs: date (required), comment, confirmToken.
crowntown_skip_serviceSkip or un-skip an upcoming serviceA
Skip (or un-skip) an upcoming collection day. Pass the rid + clid from crowntown_list_upcoming_services. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
Inputs: rid (required), clid (required), action, confirmToken.
crowntown_update_accountUpdate account contact details / preferencesA
Update your contact details and/or notification preferences. Reads your current account form, changes ONLY the field(s) you specify, and re-saves the rest verbatim. The preview shows the current values and the resulting state. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
Inputs: phone, last_name, first_name, confirmToken, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 11 tools
Most tools have a clear resource+action identity (list_invoices, skip_service, report_missed_pickup, update_account). The main soft overlap is between crowntown_get_dashboard and crowntown_get_pickup_schedule (both return next service date and address/pickup days), plus list_upcoming_services vs. pickup schedule, but the descriptions explicitly differentiate them (summary vs. empirical arrival window vs. skippable calendar entries).
All names share a consistent crowntown_ prefix and snake_case verb_noun pattern (list_*, get_*, update_*, skip_*, report_*, contact_*). crowntown_healthcheck is the one deviation, being a bare noun with no verb, but it is unambiguous in context.
11 tools is squarely in the well-scoped range, and each one maps to a distinct customer-portal need: account read/write, dashboard, schedule, upcoming services, skip, history, missed pickup, invoices, support, and diagnostics. Nothing appears redundant or filler.
The lifecycle is well covered: view account/dashboard/schedule/history, act on services (skip, report missed), manage account, list invoices, and contact support. Minor gaps exist — no subscription management (pause/cancel/change plan) and no invoice payment action beyond following the Stripe link, but these are plausibly out of scope for this MCP.
Maintenance
Related MCP Connectors
An MCP server that provides congressional transcripts
Official Todoist MCP server. Manage tasks and projects. Hosted, no API key needed.
Hosted MCP server for live public-data APIs and Skills for AI agents.
MCP server for RiverScript, an AI transcription platform - fetches transcripts shared via a link.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for GoHighLevel sub-accounts, enabling management of CRM contacts, pipelines, calendars, invoices, and more via natural language.-

BillingServ MCPofficial
AlicenseAqualityCmaintenanceThis is an MCP server for the BillingServ API. Once it's set up, your AI assistant can look up customers, invoices, orders, packages, and reports straight from your BillingServ installation375 npmMIT- AlicenseNot gradedqualityBmaintenanceUnofficial MCP server for the Apps API that enables managing customers, payments, plans, coupons, and Discord integration through natural language.47 npm2MIT
- AlicenseAqualityDmaintenanceMCP server for managing houseplants by recording waterings and observations, providing care reminders and diagnosis through natural language.9MIT