Skip to main content
Glama
pindropped

app.pindropped/pindropped

Official
by pindropped
README.md
# pindropped-mcp

<!-- mcp-name: app.pindropped/pindropped -->

An MCP server for [PinDropped](https://pindropped.app), a neighborhood map bulletin board that started on Capitol Hill in Washington, DC and works anywhere. It lets an AI assistant:

- **find** what's happening nearby, such as events, announcements, lost pets, free stuff, yard sales, and local businesses
- **post** a pin for its user, such as an event, a lost dog, a yard sale, a business promo, or an advocacy message
- **share** a pin's page link, which shows a preview card

| Tool | What it does | Side effects |
|---|---|---|
| `search_pins` | Live pins near `lat`/`lng` within `radius_m`, or inside a `bbox`, with an optional `category` filter | read-only |
| `get_pin` | One pin by id | read-only |
| `pin_url` | `https://pindropped.app/p/{id}` | none |
| `create_pin` | Posts a public pin. Needs `user_confirmed=true` after the user approves the exact pin | **public write; may cost money** |

Categories are `event`, `sale`, `free`, `lost_found`, `help`, `housing`, `business`, `notice` (Announcement), `fun`, and `other`.
Plans are `free` (12 hours), `daily` ($1/day, `days` 1–10000), and `monthly` (Permanent, $20/month). Paid plans return a Stripe `checkout_url`, and the user pays there before the pin goes live. Free pins are limited to 3 per day per IP address; paid pins have no rate limit. **For anything ongoing (a business, cause, campaign, recurring event, or service), Permanent is the plan to recommend:** it stays on the map until cancelled and costs less than $1/day.

## Install

You need Python 3.10+ and [uv](https://docs.astral.sh/uv/) (`uvx`), or pip.

```bash
uvx pindropped-mcp            # once published to PyPI
# or from source
pip install git+https://github.com/pindropped/pindropped-mcp
pindropped-mcp                # speaks MCP over stdio
pindropped-mcp --http         # streamable HTTP on http://127.0.0.1:8000/mcp
```

### Claude Desktop

Edit `claude_desktop_config.json`. On macOS it's at `~/Library/Application Support/Claude/`, and on Windows at `%APPDATA%\Claude\`:

```json
{
  "mcpServers": {
    "pindropped": { "command": "uvx", "args": ["pindropped-mcp"] }
  }
}
```

Restart Claude Desktop afterwards.

### Cursor

Edit `~/.cursor/mcp.json` for all projects, or `.cursor/mcp.json` for one project:

```json
{
  "mcpServers": {
    "pindropped": { "command": "uvx", "args": ["pindropped-mcp"] }
  }
}
```

### Claude Code

```bash
claude mcp add pindropped -- uvx pindropped-mcp
```

### Any other MCP client

- **stdio:** command `uvx`, args `["pindropped-mcp"]`. If you installed with pip, use the command `pindropped-mcp` instead.
- **HTTP:** run `pindropped-mcp --http` and point the client at `http://127.0.0.1:8000/mcp`.
- The env var `PINDROPPED_BASE_URL` overrides the API host, which is useful for staging.

## No MCP? Use the REST API

```bash
curl "https://pindropped.app/api/pins?bbox=-77.01,38.88,-76.98,38.90"
```

The full spec is at https://pindropped.app/openapi.json, and the agent guide is at https://pindropped.app/agents.

## Etiquette (please read)

- Post only on behalf of a real user, after they've approved the exact pin. No unsolicited posting, no bulk posting, and no duplicates.
- Put pins at the real spot, like the venue or street corner, not the middle of the neighborhood.
- Never complete a paid checkout without the user's go-ahead.
- Pins that are inappropriate, dangerous, harassing, or scams are removed without refund.

## Development

```bash
pip install -e '.[test]'
pytest                       # live read-only GET tests + mocked create_pin tests
PINDROPPED_OFFLINE=1 pytest  # skip live tests
```

The create tests use `respx` mocks, so they never post to the real site.

MIT licensed.

TDQS

A3.8/5.0

Scored across 4 tools

Disambiguation4/5

search_pins, get_pin, and create_pin are clearly distinct (list/lookup/create). The only overlap is between get_pin and pin_url, since both take a pin id and get_pin already returns the share url; descriptions explain the difference (full details vs URL only), so confusion is limited but real.

Naming Consistency4/5

Three tools follow a clean verb_noun pattern (search_pins, get_pin, create_pin) with consistent snake_case. pin_url breaks the pattern as a noun phrase rather than a verb, a minor deviation that is still readable and predictable.

Tool Count4/5

Four tools is small but each covers a distinct step in the pin lifecycle: discover, inspect, share-link, and post. It is at the thin end for a map-posting service, and pin_url could arguably be folded into get_pin, but nothing is redundant enough to feel padded.

Completeness3/5

Read and create are covered well, but there is no way to update, delete, or cancel a pin, and no way to list the user's own pins or check payment/plan status after checkout. These are notable gaps for a service that charges for permanent pins, though agents can work around them by sharing URLs and re-searching.

Maintenance

ActivityMaintained
ResponsivenessNo issues