agentCLAWHUBUnverified

crowntowncompost-mcp

Access the Crown Town Compost customer portal (portal.crowntowncompost.com) — pickup/service history, invoices, upcoming service days, skips, account details — from a shell with curl instead of running the crowntowncompost-mcp server. Logs in with a Django username/password form POST to get a session cookie, then curls two JSON endpoints and a few server-rendered pages. Use when you want Crown Town Compost data without the MCP, in a script, or on a machine where the MCP isn't installed. Skill: crowntowncompost-mcp Owner: chrischall Summary: Access the Crown Town Compost customer portal (portal.crowntowncompost.com) — pickup/service history, invoices, upcoming service days, skips, account details — from a shell with curl instead of running the crowntowncompost-mcp server. Logs in with a Django username/password form POST to get a session cookie, then curls two JSON endpoints and a few server-rendered

OpenClaw

Rank

62

Safety

84

Downloads

1.4k

Updated

Oct 10, 2026

Version

1.1.5

Source

CLAWHUB

About

What it does, and when to use it.

Capability contract not published. No trust telemetry is available yet. 1.4K downloads reported by the source. Last updated 10/10/2026.

Avoid when

  • Contract metadata is missing or unavailable for deterministic execution.

Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing

Public facts

Every fact links back to the source it came from.

Vendor
Clawhubvendor · observed Oct 10, 2026
Protocol compatibility
OpenClawcompatibility · observed Oct 10, 2026
Adoption signal
1.4K downloadsadoption · observed Oct 10, 2026
Latest release
1.1.5release · observed Oct 9, 2026
Handshake status
UNKNOWNsecurity

Install and run

Setup complexity: low.

clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:crowntowncompost-mcp
  1. Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.
  2. Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.

Contract: missing

curl -s "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-crowntowncompost-mcp/snapshot"

Documentation

CLAWHUB

146,400 characters of source documentation, loaded on request.

Extracted files

4 files captured from the source.

SKILL.md

---
name: crowntown-portal
description: >-
  Access the Crown Town Compost customer portal (portal.crowntowncompost.com) —
  pickup/service history, invoices, upcoming service days, skips, account
  details — from a shell with curl instead of running the crowntowncompost-mcp
  server. Logs in with a Django username/password form POST to get a session
  cookie, then curls two JSON endpoints and a few server-rendered pages. Use
  when you want Crown Town Compost data without the MCP, in a script, or on a
  machine where the MCP isn't installed.
---

# Crown Town Compost portal via curl (no MCP)

`crowntowncompost.com` is only a marketing site. All customer data lives at
**`portal.crowntowncompost.com`** — a **Django** app (a white-labeled
**StopSuite** hauler platform; it CNAMEs to `crowntown.stopsuite.com`).

It is reachable **server-side**: no bot wall, no browser bridge, no `fpx`, no
Transporter extension. Auth is a real **username + password form POST** that
returns an HttpOnly `sessionid` cookie. `curl` with a cookie jar reaches
everything a signed-in customer can see.

Two of the richest surfaces are clean **JSON** endpoints (service history and
billing); the rest are server-rendered HTML.

## The one thing that trips people up: Django CSRF

Every **POST** (including the login and the two JSON reads) needs all of:

- the `csrftoken` cookie (set by any GET), sent back in the cookie jar
- an `X-CSRFToken:` header **equal to that cookie's value**
- `Origin:` and `Referer:` headers on the portal's own origin — Django rejects
  HTTPS POSTs that lack them, with a 403, *before* looking at your credentials

GETs need none of this. A 403 on a POST almost always means a missing header,
not a bad password.

## One-time setup

```sh
export CROWNTOWN_USERNAME='[email protected]'
export CROWNTOWN_PASSWORD='your-portal-password'   # or: op read "op://Private/CrownTown/password"
export CT=https://portal.crowntowncompost.com
JAR=~/.cache/crowntown-cookies.txt
mkdir -p ~/.cache && : > "$JAR"
```

## Log in (get the session cookie)

Read the password from stdin (`password@-`) rather than putting it in argv —
`--data-urlencode name=value` exposes the value to any local user via `ps`
while the process runs.

```sh
# 1. GET the login page to pick up the csrftoken cookie + the hidden form token.
CSRF_FORM=$(curl -s -c "$JAR" -b "$JAR" "$CT/accounts/login/?next=/accounts/" \
  | grep -o 'name="csrfmiddlewaretoken" value="[^"]*"' | head -1 | sed 's/.*value="//;s/"$//')
CSRF_COOKIE=$(awk '$6=="csrftoken"{print $7}' "$JAR" | tail -1)

# 2. POST the credentials. Do NOT follow redirects (-L) here: the 302's
#    Set-Cookie carries the sessionid, and success is "302 away from login".
printf '%s' "$CROWNTOWN_PASSWORD" | curl -s -c "$JAR" -b "$JAR" \
  -H "X-CSRFToken: $CSRF_COOKIE" -H "Origin: $CT" \
  -H "Referer: $CT/accounts/login/?next=/accounts/" \
  --data-urlencode "csrfmiddlewaretoken=$CSRF_FORM" \
  --data-urlencode "username=$CROWNTOWN_USERNAME" \
  --data-urlencod

_meta.json

{
  "ownerId": "kn700jq4sjtf2anb0rk3ft4p7n856872",
  "slug": "crowntowncompost-mcp",
  "version": "1.1.5",
  "publishedAt": 1791588370444
}

references/endpoints.md

# Crown Town Compost portal — endpoint reference

Ready-to-run request bodies for `portal.crowntowncompost.com` (Django /
StopSuite). Assumes the `$CT`, `$JAR`, `csrf()`, `ctget()`, `ctpost()` helpers
from `SKILL.md` are already defined and you are signed in.

All shapes were live-verified 2026-07-31 against a signed-in customer account.

---

## Response envelope (both JSON endpoints)

```json
{
  "meta": { "page": 1, "pages": 4, "perpage": 20, "total": 61,
            "sort": "desc", "field": "date", "rowIds": [157404] },
  "qs": "<serialized query state>",
  "data": [ /* rows */ ]
}
```

Request grammar (Metronic KTDatatable):

| Param | Meaning |
|---|---|
| `pagination[page]` | 1-based page number |
| `pagination[perpage]` | rows per page (20 default) |
| `sort[field]` | column field name |
| `sort[sort]` | `asc` \| `desc` |
| `query[<field>]` | per-column filter |
| `query[generalSearch]` | free-text search |

---

## POST `/accounts/stops/api/` — service history

Sortable/filterable fields: `RecordID, address, date, status, timestamp, services`.

Row:

```json
{ "RecordID": 157404, "status": "Success", "timestamp": "9:34 a.m.",
  "address": "123 Example Street", "weight": "35", "nickname": "",
  "date": "Friday, Jul 31, 2026", "services": "35 x1" }
```

- `status` displays capitalized (`Success`/`Missing`/`Empty`/`Inaccessible`/`Unacceptable`)
  but **`query[status]` matches lowercase only**.
- `services` is `<service code> x<count>` — `x0` on a missed stop.
- `weight` is in lbs and is empty when nothing was collected.

Recipes:

```sh
# Every missed pickup, newest first
ctpost /accounts/stops/api/ \
  --data-urlencode 'query[status]=missing' \
  --data-urlencode 'pagination[perpage]=100' \
  --data-urlencode 'sort[field]=date' --data-urlencode 'sort[sort]=desc' \
| jq -r '.data[] | "\(.date)  \(.status)"'

# Total weight diverted across all recorded stops
ctpost /accounts/stops/api/ --data-urlencode 'pagination[perpage]=100' \
| jq '[.data[].weight | select(. != "") | tonumber] | add'

# Success rate
ctpost /accounts/stops/api/ --data-urlencode 'pagination[perpage]=100' \
| jq '[.data[].status] | {total: length, success: map(select(.=="Success")) | length}'

# Page through everything
for p in $(seq 1 4); do
  ctpost /accounts/stops/api/ --data-urlencode "pagination[page]=$p" \
    --data-urlencode 'pagination[perpage]=20' | jq -c '.data[] | {date,status}'
done
```

---

## POST `/accounts/billing-history/api/` — invoices

Row:

```json
{ "RecordID": 1, "number": "INV-1", "date": "Jul 1, 2026", "amount": "$44.00",
  "status": "paid", "invoice_pdf": "https://…", "receipt_url": "https://…",
  "hosted_invoice_url": "https://…", "is_payable": false, "invoice_id": 11 }
```

Stripe-backed. `is_payable: true` marks an open invoice.

```sh
# Open invoices with their payment links
ctpost /accounts/billing-history/api/ --data-urlencode 'pagination[perpage]=50' \
| jq -r '.data[] | select(.is_payable) | "\(.date)  \(.amount)  \(.hosted_invoice_url)"'

skill-card.md

## Description:

Guides agents in accessing a Crown Town Compost customer account through shell requests to review service history, invoices, upcoming pickups, and account details without the MCP server.

This skill is ready for commercial/non-commercial use.

## Publisher:

[chrischall](https://clawhub.ai/user/chrischall)

### License/Terms of Use:

MIT-0

## Use Case:

Customers and their authorized agents use shell-based guidance to check pickup history, billing, and upcoming service, or to manage their Crown Town Compost account.

### Deployment Geography for Use:

Global

## Known Risks and Mitigations:

Risk: Persistent session cookies could expose a live customer account if the cookie jar is accessed by others.

Mitigation: Use a temporary cookie jar restricted to the account owner (chmod 600), and delete it after use.

Risk: Commands can skip service, change profile details, contact support, report missed pickups, or request cancellation.

Mitigation: Require explicit confirmation before any account-changing action and re-read the account afterward to verify the result.

## Reference(s):

- [Crown Town Compost portal endpoint reference](artifact/references/endpoints.md)
- [ClawHub skill listing](https://clawhub.ai/chrischall/skills/crowntowncompost-mcp)

## Skill Output:

**Output Type(s):** [Shell commands, Guidance]

**Output Format:** [Markdown with shell code blocks]

**Output Parameters:** [1D]

**Other Properties Related to Output:** [Commands can retrieve account data or submit account changes when authorized.]

## Skill Version(s):

1.1.5 (source: ClawHub release metadata)

## Ethical Considerations:

Users should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.
Github ReposUpdated 20h agoRank 70

AionUi

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

activepieces

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW

Machine-readable data

The same record, as JSON, for agents and crawlers.

{
  "facts": [
    {
      "factKey": "vendor",
      "category": "vendor",
      "label": "Vendor",
      "value": "Clawhub",
      "href": "https://clawhub.ai/chrischall/skills/crowntowncompost-mcp",
      "sourceUrl": "https://clawhub.ai/chrischall/skills/crowntowncompost-mcp",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-10T13:22:17.589Z",
      "isPublic": true
    },
    {
      "factKey": "protocols",
      "category": "compatibility",
      "label": "Protocol compatibility",
      "value": "OpenClaw",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-crowntowncompost-mcp/contract",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-crowntowncompost-mcp/contract",
      "sourceType": "contract",
      "confidence": "medium",
      "observedAt": "2026-10-10T13:22:17.589Z",
      "isPublic": true
    },
    {
      "factKey": "traction",
      "category": "adoption",
      "label": "Adoption signal",
      "value": "1.4K downloads",
      "href": "https://clawhub.ai/chrischall/crowntowncompost-mcp",
      "sourceUrl": "https://clawhub.ai/chrischall/crowntowncompost-mcp",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-10T13:22:17.589Z",
      "isPublic": true
    },
    {
      "factKey": "latest_release",
      "category": "release",
      "label": "Latest release",
      "value": "1.1.5",
      "href": "https://clawhub.ai/chrischall/crowntowncompost-mcp",
      "sourceUrl": "https://clawhub.ai/chrischall/crowntowncompost-mcp",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-10-09T23:26:10.444Z",
      "isPublic": true
    },
    {
      "factKey": "handshake_status",
      "category": "security",
      "label": "Handshake status",
      "value": "UNKNOWN",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-crowntowncompost-mcp/trust",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-crowntowncompost-mcp/trust",
      "sourceType": "trust",
      "confidence": "medium",
      "observedAt": null,
      "isPublic": true
    }
  ],
  "events": [
    {
      "eventType": "release",
      "title": "Release 1.1.5",
      "description": "- Removed the file skill-card.md from the repository. - No changes to functionality or documentation in this release.",
      "href": "https://clawhub.ai/chrischall/crowntowncompost-mcp",
      "sourceUrl": "https://clawhub.ai/chrischall/crowntowncompost-mcp",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-10-09T23:26:10.444Z",
      "isPublic": true
    }
  ]
}

Record generated Oct 10, 2026.

Sponsored

Ads related to crowntowncompost-mcp and adjacent AI workflows.