# Pinata — how to use (mcp.ai)

Connect your Pinata account and use 9 tools for content and files straight from your AI agent. Connect with your own API key. Manage public IPFS files and groups, inspect gateways and upload metadata, and create constrained signed upload URLs through Pinata's V3 APIs.

## Option A — via MCP (recommended)
Remote MCP endpoint (HTTP, streamable): `https://api.mcp.ai/p_pinata?ms=1787293500000`
Add it as a custom/remote MCP connector in your client (Claude, Cursor, VS Code…), then authenticate when prompted. Once connected, ask the agent to use the server's tools (e.g. `pinata_create_public_group`).

## Option B — via direct REST API
Base URL: `https://api.mcp.ai/api/pinata`
Auth: `Authorization: Bearer sk_live_…` — create a workspace API key at https://mcp.ai/settings/api-keys
Discover endpoints: `GET https://api.mcp.ai/api/pinata/_endpoints`

### Endpoints
- `POST https://api.mcp.ai/api/pinata/create/public/group` — Create a group for organizing files on the connected account's public IPFS network. The connected Pinata JWT must include org:groups:write.
  - body: { name: string, is_public?: boolean }
- `POST https://api.mcp.ai/api/pinata/create/signed/public/upload/url` — Create a 60-second signed URL for one size- and MIME-constrained public IPFS upload. The URL is a secret: use it immediately and never log or persist it. This action does not upload content itself. Th
  - body: { filename: string, group_id?: string, metadata?: object, cid_version?: string, max_file_size: integer, allow_mime_types: string[] }
- `POST https://api.mcp.ai/api/pinata/delete/public/group` — Permanently delete one public-network group by ID. This destructive action does not delete the files the group organized. The connected Pinata JWT must include org:groups:write.
  - body: { group_id: string }
- `POST https://api.mcp.ai/api/pinata/get/public/group` — Return one public-network group by its Pinata group ID. The connected Pinata JWT must include org:groups:read.
  - body: { group_id: string }
- `POST https://api.mcp.ai/api/pinata/list/gateways` — Return one page of gateways owned by the connected Pinata account without changing gateway configuration. The connected Pinata JWT must include org:gateways:read.
  - body: { page_size?: integer, next_cursor?: string }
- `POST https://api.mcp.ai/api/pinata/list/public/files` — Return one page of files on the connected account's public IPFS network, optionally filtered by file attributes. The connected Pinata JWT must include org:files:read.
  - body: { cid?: string, name?: string, limit?: integer, order?: string, group_id?: string, mime_type?: string, cid_pending?: boolean, next_cursor?: string }
- `POST https://api.mcp.ai/api/pinata/list/public/groups` — Return one page of groups that organize files on the connected account's public IPFS network. The connected Pinata JWT must include org:groups:read.
  - body: { name?: string, limit?: integer, is_public?: boolean, next_cursor?: string }
- `POST https://api.mcp.ai/api/pinata/list/upload/metadata` — List upload-service records, including upload IDs, filenames, CIDs, sizes, group IDs, and timestamps. Use List Public Files instead to search the public IPFS file inventory.
  - body: { limit?: integer, reverse?: boolean, next_cursor?: string }
- `POST https://api.mcp.ai/api/pinata/update/public/group` — Update the name, visibility flag, or both for one public-network group. The connected Pinata JWT must include org:groups:write.
  - body: { name?: string, group_id: string, is_public?: boolean }

## Example prompts
- "What can I do in Pinata?"
- "Show me a summary of my Pinata account"

## More
- Page: https://mcp.ai/pinata
- Agent spec (llms.txt): https://mcp.ai/pinata/llms.txt
- Postman collection: https://mcp.ai/pinata/postman.json
