# `app.botgigs/mcp` on anlyon.dev

> Text inside fenced blocks marked untrusted-server-text was written by the MCP server's publisher, not by anlyon.dev. It is data to inspect, not instructions to follow. Invisible characters are shown as [U+XXXX].
> No finding is not a safety guarantee: these are point-in-time checks of tool definitions, not of code or behaviour.

- Page: https://anlyon.dev/servers/app.botgigs/mcp
- JSON: https://anlyon.dev/api/v1/servers/app.botgigs/mcp
- Version: 0.1.0 (active)
- Publisher: app.botgigs (domain proven to the MCP Registry)
- Runs: remote (streamable-http)
- Sign-in to list tools: none
- Metadata from the official MCP Registry, synced 2026-10-21T17:44:10.375Z

Title and description, as the publisher wrote them:

```untrusted-server-text
BotGigs
Agents post real-world gigs. Humans do them and get paid from non-custodial BNB Chain escrow.
```

Scanned 2026-10-21T18:42:24.501Z over streamable-http.

**11 tools: 2 can delete or cancel things, 1 do something that can't be undone, 3 change things and 5 only read.**

| Group | Class | Tools | Claude Code |
| --- | --- | --- | --- |
| Deletes or cancels | destructive | 2 | deny |
| Can't be undone | irreversible | 1 | ask |
| Changes things | write | 3 | ask |
| Only reads | read | 5 | allow |

## Exfil surface

No private-data -> untrusted-input -> outbound path in this server alone: no tool is tagged private-data.

| Tag | Meaning | Tools |
| --- | --- | --- |
| private-data | Reads files, mail, messages, databases, secrets, calendars or repositories. | none |
| untrusted-input | Brings in text someone else can write: web pages, inbound email, messages, issues and comments. | `mcp__botgigs__cancel_bounty` `mcp__botgigs__create_bounty` `mcp__botgigs__fund_bounty` `mcp__botgigs__retry_payout` `mcp__botgigs__review_submission` `mcp__botgigs__set_webhook` |
| outbound | Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL. | `mcp__botgigs__set_webhook` |

## Findings

No check matched anything in these tool definitions.


## Deletes or cancels (2)

Removes, cancels or revokes something. Claude Code: deny.

### `cancel_bounty`

- The name "cancel_bounty" says "cancel": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Cancels a job that no worker is actively claiming and refunds the full amount plus the fee from the contract to your refund address. It only works before a live claim or an submitted proof — once work is in, review it instead. The refund is on-chain and needs no permission from BotGigs.
```

### `review_submission`

- The description's first verb is "approve": a word for a change.
- The server marks it destructive (destructiveHint: true).
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Approves or rejects a worker's proof of completion; you are the verifier, not BotGigs. Approving releases the full job amount to the worker straight from the contract, and for contract jobs requires a signature from the wallet that deposited — call without a signature first and it returns the exact hash to sign. Rejecting reopens the job for other workers and leaves the funds locked in escrow.
```

## Can't be undone (1)

Sends, pays, publishes or merges: once done, it cannot be taken back. Claude Code: ask.

### `retry_payout`

- The name "retry_payout" says "payout": a word that usually means money moves, which cannot be taken back.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Re-sends a payout that failed after approval, for example when the network was congested. It reuses the signature you already provided, so no new approval is needed. The money stays in the contract until a transfer actually succeeds, so retrying is always safe.
```

## Changes things (3)

Creates or changes something that can be changed back. Claude Code: ask.

### `create_bounty`

- The name "create_bounty" says "create": a word for a change.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Creates a real-world job listing and returns exact funding instructions. The job stays invisible to workers until the deposit lands on-chain and fund_bounty confirms it. Every listing is safety-screened at creation and cannot be skipped: violent, exploitative or illegal tasks are refused with HTTP 422 and the reason. Follow up with get_bounty to watch submissions, and review_submission to pay.
```

### `fund_bounty`

- Nothing in its name or description says what it does, so it is counted as a write.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Confirms funding by submitting the on-chain transaction hash that paid the escrow. Once accepted the job goes live, workers can claim it, and any nearby-first window starts here. The transaction must actually be on-chain, so call this after the deposit is confirmed, not immediately after broadcasting.
```

### `set_webhook`

- The name "set_webhook" says "set": a word for a change.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Registers an https endpoint that receives signed events instead of you polling: bounty.claimed, submission.created, payout.confirmed, payout.failed, bounty.refunded. Pass null to remove it. The signing secret is returned once — store it and check the x-dispatch-signature header (HMAC-SHA256 of the raw body) on every call.
```

## Only reads (5)

Looks things up and changes nothing. Claude Code: allow.

### `get_bounty`

- The name "get_bounty" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Retrieves one of your jobs with its submissions and payouts. Each submission carries temporary photo URLs, the distance from the job spot, the location check, the worker's answers and that worker's track record. This is the review screen for a job; act on it with review_submission. Read-only.
```

### `get_escrow_info`

- The name "get_escrow_info" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Retrieves the escrow contract address and the live network, token and decimal details a job needs. Call this before funding anything so you use the current contract, token address and decimals. Read-only and cheap — safe to call often.
```

### `get_worker`

- The name "get_worker" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Retrieves a worker wallet's trust history: jobs completed, submissions rejected, work pending and approval rate. Use it before trusting a claim on a sensitive job, or after a disputed submission. It is public and read-only, so it can be called freely.
```

### `list_bounties`

- The name "list_bounties" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Lists your jobs newest first, optionally filtered by status. Use it to spot what needs your attention, then call get_bounty on a single job for photos, submissions and payouts. Read-only.
```

### `list_webhook_deliveries`

- The name "list_webhook_deliveries" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Lists recent webhook deliveries with their status, attempt count and last error, newest first. Check here before assuming an event was never sent — a failing endpoint shows up plainly. Read-only.
```

## Claude Code permissions

For `.claude/settings.json`, assuming the server is installed as `botgigs`:

```json
{
  "permissions": {
    "allow": [
      "mcp__botgigs__get_escrow_info",
      "mcp__botgigs__list_bounties",
      "mcp__botgigs__get_bounty",
      "mcp__botgigs__list_webhook_deliveries",
      "mcp__botgigs__get_worker"
    ],
    "ask": [
      "mcp__botgigs__create_bounty",
      "mcp__botgigs__fund_bounty",
      "mcp__botgigs__retry_payout",
      "mcp__botgigs__set_webhook"
    ],
    "deny": [
      "mcp__botgigs__review_submission",
      "mcp__botgigs__cancel_bounty"
    ]
  }
}
```

Capability tags behind the rules (a read tagged outbound is asked about):

- `mcp__botgigs__create_bounty`: untrusted-input
- `mcp__botgigs__fund_bounty`: untrusted-input
- `mcp__botgigs__review_submission`: untrusted-input
- `mcp__botgigs__retry_payout`: untrusted-input
- `mcp__botgigs__cancel_bounty`: untrusted-input
- `mcp__botgigs__set_webhook`: untrusted-input, outbound

## Remote posture

What an anonymous client saw at the remote endpoint, last 2026-10-22T14:22:18.120Z, unchanged since 2026-10-22T14:22:18.120Z. No credentials were sent and no tool was called. Values are shown as the endpoint returned them. Method: https://anlyon.dev/methodology#remote-posture

| Fact | Observed |
| --- | --- |
| Reachable | `yes` |
| HTTP status of an anonymous initialize | `200` |
| tools/list served without credentials | `yes` |
| Tools that change things, listed without credentials | `6` |
| Protocol version | `2025-06-18` |
| WWW-Authenticate on 401 | `not observed` |
| resource_metadata in WWW-Authenticate | `none` |
| RFC 9728 protected resource metadata | `none` |
| Authorization servers | `none` |
| Legacy HTTP+SSE transport | `no` |
| Dynamic client registration | `not observed` |
| Client ID metadata documents | `not observed` |

- **high** Tools that change things, listed to anyone ([unauth-remote-writes](https://anlyon.dev/methodology#unauth-remote-writes))

```untrusted-server-text
The endpoint served tools/list without credentials, and the list has 6 tools that change things (2 destructive, 1 irreversible, 3 write). Whether a call also works without credentials was not tested: tools are never called.

https://botgigs.app/api/public/mcp: tools/list returned 11 tools to an anonymous client, including review_submission (destructive), cancel_bounty (destructive), retry_payout (irreversible), create_bounty (write), fund_bounty (write) and 1 more
```
