# Patreon MCP tools

> Every Patreon MCP tool on the Cotlet server: tool names, input schemas, a tools/call example and an example result for each tool.

Source: https://cotlet.dev/docs/mcp/patreon

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

13 tools for Patreon on the Cotlet MCP server. Your agent picks them from tools/list.

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your own Patreon creator account
- Integration page: https://cotlet.dev/integrations/patreon-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `patreon_list_tiers` | read | Your membership tiers with name, description and benefits. |
| `patreon_list_members` | read | Members from your Relationship manager with tier, status and join date. |
| `patreon_export_members` | read | The Relationship manager CSV with your filters applied, as a download link. |
| `patreon_list_posts` | read | Your posts, scheduled ones first, with status, audience and publish date. |
| `patreon_get_post` | read | Full post: title, body, tiers with access, status and URL. |
| `patreon_list_chats` | read | Conversations in your Patreon Chats with the member and the last message. |
| `patreon_create_post` | write | Save a new post as a draft. Nothing is published. |
| `patreon_update_post` | write | Change the title, body or audience of a draft or scheduled post. |
| `patreon_schedule_post` | write | Set the date and time a draft is published. |
| `patreon_publish_post` | write | Publish a draft now. |
| `patreon_send_message` | write | Direct message to one current or former paid member, as you. |
| `patreon_message_tier` | write | The same direct message to the members of one or more tiers. |
| `patreon_update_tier` | write | Change a tier's name, description or benefits. |

## List tiers

MCP tool: `patreon_list_tiers`

Access: read.

Returns every tier on your Patreon page. Use the tier_id of each item in the other endpoints. Benefits are the ones shown in the tier editor.

### Parameters

No parameters.

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_list_tiers",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "tiers": [
      {
        "tier_id": "24019876",
        "name": "Gold",
        "description": "Everything in Supporter plus early episodes.",
        "benefits": [
          "Episodes a week before release",
          "Monthly Q&A"
        ]
      }
    ]
  },
  "isError": false
}
```

## List members

MCP tool: `patreon_list_members`

Access: read.

Lists members the way the Relationship manager does. Filter by paid or free, active or canceled, tier or join date. Pass next_cursor back as cursor for the next page.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `paid` | enum | no | paid, free or all. Default: all. |
| `status` | enum | no | active, canceled or all. Default: active. |
| `tier_id` | string | no | Only members of this tier. |
| `joined_since` | date | no | Only members who joined on or after this date. |
| `limit` | integer | no | 1 to 100. Default: 50. |
| `cursor` | string | no | Next page cursor from the previous call. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_list_members",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "members": [
      {
        "member_id": "m_4471920",
        "name": "Maya Fischer",
        "tier": "Gold",
        "status": "active",
        "paid": true,
        "joined_at": "2026-10-08T10:12:00Z"
      }
    ],
    "next_cursor": "eyJvZmZzZXQiOjUwfQ"
  },
  "isError": false
}
```

## Export members

MCP tool: `patreon_export_members`

Access: read.

Runs the same CSV export as the button in the Relationship manager, with the filters you pass. The file has the columns you chose in the table settings, plus Charge frequency if you offer annual memberships. It reaches no one and changes nothing.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `paid` | enum | no | paid, free or all. Default: all. |
| `status` | enum | no | active, canceled or all. Default: active. |
| `tier_id` | string | no | Only members of this tier. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_export_members",
    "arguments": {
      "paid": "paid",
      "status": "active"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "file_url": "https://cotlet.dev/api/v1/files/exports/patreon-members-2026-10-11.csv",
    "rows": 214,
    "filters": {
      "status": "active",
      "tier_id": "24019876"
    }
  },
  "isError": false
}
```

## List posts

MCP tool: `patreon_list_posts`

Access: read.

Lists your posts. Scheduled posts come first, labeled with their date, as in the Patreon post list. Body is a short preview; get_post returns the full text.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `status` | enum | no | published, draft, scheduled or all. Default: all. |
| `limit` | integer | no | 1 to 50. Default: 20. |
| `cursor` | string | no | Next page cursor from the previous call. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_list_posts",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "posts": [
      {
        "post_id": "118204553",
        "title": "Episode 12: the full cut",
        "status": "scheduled",
        "publish_at": "2026-10-16T18:00:00+01:00",
        "audience": "paid_tiers",
        "preview": "This week we go behind the scenes..."
      }
    ],
    "next_cursor": null
  },
  "isError": false
}
```

## Get post

MCP tool: `patreon_get_post`

Access: read.

Returns one post with its full body and the tiers that can see it. Use it before update_post to see what is there now.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `post_id` | string | yes | Post ID from list_posts. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_get_post",
    "arguments": {
      "post_id": "post_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "post_id": "118204553",
    "title": "Episode 12: the full cut",
    "body": "This week we go behind the scenes...",
    "status": "scheduled",
    "publish_at": "2026-10-16T18:00:00+01:00",
    "tier_ids": [
      "24019876"
    ],
    "url": "https://www.patreon.com/posts/episode-12-118204553"
  },
  "isError": false
}
```

## List chats

MCP tool: `patreon_list_chats`

Access: read.

Lists your Chats, most recent first, with the member, the last message and whether you sent it. Set unanswered_only to see what needs a reply.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `unanswered_only` | boolean | no | Skip conversations where you sent the last message. |
| `limit` | integer | no | 1 to 50. Default: 20. |
| `cursor` | string | no | Next page cursor from the previous call. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_list_chats",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "chats": [
      {
        "member_id": "m_4471920",
        "name": "Maya Fischer",
        "last_message": "Where do I find the Q3 files?",
        "last_from": "member",
        "updated_at": "2026-10-10T16:02:00Z"
      }
    ],
    "next_cursor": null
  },
  "isError": false
}
```

## Create post

MCP tool: `patreon_create_post`

Access: write.

Creates a draft in your Patreon post list. Nobody sees it until publish_post or schedule_post. create_post runs without asking first: it reaches no one and a draft is removed with one call in Patreon.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `title` | string | yes | Post title. |
| `body` | string | yes | Post text. Links and images by URL. |
| `audience` | enum | no | public, all_members or paid_tiers. Default: all_members. |
| `tier_ids` | string[] | no | Tiers with access when audience is paid_tiers. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_create_post",
    "arguments": {
      "title": "title",
      "body": "body"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "post_id": "118204553",
    "status": "draft",
    "audience": "paid_tiers",
    "tier_ids": [
      "24019876"
    ],
    "title": "Episode 12: the full cut"
  },
  "isError": false
}
```

## Update post

MCP tool: `patreon_update_post`

Access: write.

Edits a post that is not published yet, as you would in the post editor. It reaches no one until the post goes out, so it runs without asking first. Published posts are not changed.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `post_id` | string | yes | Post ID from list_posts. |
| `fields` | object | yes | Any of title, body, audience, tier_ids. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_update_post",
    "arguments": {
      "post_id": "post_8c41d2",
      "fields": "fields"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "post_id": "118204553",
    "status": "draft",
    "title": "Episode 12: the director's cut"
  },
  "isError": false
}
```

## Schedule post

MCP tool: `patreon_schedule_post`

Access: write. Confirm: waits for the user's OK before it runs.

Schedules a draft, which then shows at the top of your post list labeled Scheduled. Set notify_members to false to switch off the member notification for this post. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `post_id` | string | yes | Post ID from list_posts. |
| `publish_at` | datetime | yes | ISO 8601 with time zone. |
| `notify_members` | boolean | no | Notify members when the post goes out. Default: true. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_schedule_post",
    "arguments": {
      "post_id": "118204553",
      "publish_at": "2026-10-16T18:00:00+01:00",
      "notify_members": true
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "post_id": "118204553",
    "status": "scheduled",
    "publish_at": "2026-10-16T18:00:00+01:00",
    "audience": "paid_tiers",
    "tier_ids": [
      "24019876"
    ],
    "url": "https://www.patreon.com/posts/episode-12-118204553"
  },
  "isError": false
}
```

## Publish post

MCP tool: `patreon_publish_post`

Access: write. Confirm: waits for the user's OK before it runs.

Publishes a draft immediately to its audience. Members are notified unless notify_members is false. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `post_id` | string | yes | Post ID from list_posts. |
| `notify_members` | boolean | no | Notify members when the post goes out. Default: true. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_publish_post",
    "arguments": {
      "post_id": "post_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "post_id": "118204553",
    "status": "published",
    "url": "https://www.patreon.com/posts/episode-12-118204553"
  },
  "isError": false
}
```

## Send message

MCP tool: `patreon_send_message`

Access: write. Confirm: waits for the user's OK before it runs.

Sends a direct message to one member in Chats. Patreon allows direct messages only to current or former paid members, so a free member returns an error. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `member_id` | string | yes | Member ID from list_members or list_chats. |
| `body` | string | yes | Message text. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_send_message",
    "arguments": {
      "member_id": "m_4471920",
      "body": "Hi Maya, the Q3 files are in the Q3 collection, third post from the top."
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "member_id": "m_4471920",
    "status": "sent",
    "sent_at": "2026-10-11T09:05:00+02:00"
  },
  "isError": false
}
```

## Message tier

MCP tool: `patreon_message_tier`

Access: write. Confirm: waits for the user's OK before it runs.

Sends one message to the members of the tiers you name, as the Relationship manager does when you filter by tier. Only paid members can be messaged. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `tier_ids` | string[] | yes | Tier IDs from list_tiers. |
| `body` | string | yes | Message text. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_message_tier",
    "arguments": {
      "tier_ids": [
        "24019876",
        "24019877"
      ],
      "body": "Your October pack is ready: https://example.com/october-pack. Thanks for being here!"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "tier_ids": [
      "24019876"
    ],
    "status": "sent",
    "recipients": 214
  },
  "isError": false
}
```

## Update tier

MCP tool: `patreon_update_tier`

Access: write. Confirm: waits for the user's OK before it runs.

Edits the fields at the top of the tier editor: name, description and benefits. Members see the change on your page. Prices are not changed by this tool. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `tier_id` | string | yes | Tier ID from list_tiers. |
| `fields` | object | yes | Any of name, description, benefits (string[]). |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "patreon_update_tier",
    "arguments": {
      "tier_id": "tier_8c41d2",
      "fields": "fields"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "tier_id": "24019876",
    "name": "Gold",
    "benefits": [
      "Episodes a week before release",
      "Monthly Q&A",
      "Monthly Q&A call"
    ],
    "status": "updated"
  },
  "isError": false
}
```
