Skip to main content
Glama
README.md
# Pipefy MCP Server

MCP (Model Context Protocol) server for integrating Pipefy GraphQL API with LLMs.

## Overview

This MCP server enables LLMs to interact with Pipefy through comprehensive tools for managing pipes, cards, database tables, and records.

## Features

### Pipes & Cards
- **pipefy_list_pipes** - List available pipes and organizations
- **pipefy_get_pipe** - Get detailed pipe information (phases, members, fields, labels)
- **pipefy_list_cards** - List cards in a pipe with optional search
- **pipefy_get_card** - Get comprehensive card details with all field values
- **pipefy_search_cards** - Search cards by specific field values
- **pipefy_create_card** - Create a new card in a pipe
- **pipefy_get_phase** - Get phase details and fields

### Database Tables & Records
- **pipefy_list_tables** - List database tables in an organization
- **pipefy_get_table** - Get detailed table information (fields, members, webhooks)
- **pipefy_create_table** - Create a new database table
- **pipefy_list_table_records** - List records from a table
- **pipefy_get_table_record** - Get comprehensive record details with all field values
- **pipefy_create_table_record** - Create a new record in a table

All tools support both Markdown (human-readable) and JSON (machine-readable) output formats.

## Installation

```bash
# Install dependencies using uv
uv sync

# Or with pip
pip install -e .
```

## Configuration

Set your Pipefy API token as an environment variable:

```bash
export PIPEFY_API_TOKEN=your_api_token_here
```

To get your API token:
1. Go to Pipefy Settings
2. Navigate to Personal Access Tokens
3. Create a new token with appropriate permissions

## Usage

### Running the Server

```bash
# Run with stdio transport (default)
python main.py

# Or if installed as a script
pipefy-mcp
```

### Testing with MCP Inspector

```bash
PIPEFY_API_TOKEN=your_token npx @modelcontextprotocol/inspector python main.py
```

### Cursor IDE Integration

Add to your `.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "pipefy": {
      "command": "python",
      "args": ["/path/to/pipefy-mcp/main.py"],
      "env": {
        "PIPEFY_API_TOKEN": "your_api_token_here"
      }
    }
  }
}
```

## Example Queries

Once connected, you can ask the LLM things like:

### Pipes & Cards
- "List all cards in pipe 301234567"
- "Get details for card 123456789"
- "Search for cards with email john@example.com in pipe 301234567"
- "Show me the phases in pipe 301234567"
- "Create a new card in pipe 301234567 with title 'New Request'"

### Database Tables & Records
- "List all database tables in organization 12345"
- "Show me the structure of table ZtEdWh"
- "Create a new table called 'Customers' in organization 12345"
- "List all records from table ZtEdWh"
- "Get details for record 987654"
- "Add a new customer record to table ZtEdWh"

## API Reference

### pipefy_get_pipe

Get detailed information about a Pipefy pipe.

**Parameters:**
- `pipe_id` (required): The unique ID of the pipe
- `response_format`: "markdown" (default) or "json"

### pipefy_list_cards

List cards from a specific pipe.

**Parameters:**
- `pipe_id` (required): The pipe ID to list cards from
- `limit`: Maximum cards to return (1-50, default: 20)
- `search`: Optional search term for card titles
- `response_format`: "markdown" (default) or "json"

### pipefy_get_card

Get detailed information about a specific card.

**Parameters:**
- `card_id` (required): The unique ID of the card
- `response_format`: "markdown" (default) or "json"

### pipefy_search_cards

Search cards by a specific field value.

**Parameters:**
- `pipe_id` (required): The pipe ID to search in
- `field_id` (required): The field ID to search by
- `field_value` (required): The value to search for
- `limit`: Maximum cards to return (1-50, default: 20)
- `response_format`: "markdown" (default) or "json"

### pipefy_get_phase

Get phase details and fields.

**Parameters:**
- `phase_id` (required): The unique ID of the phase
- `response_format`: "markdown" (default) or "json"

### pipefy_list_pipes

List Pipefy pipes available to the user.

**Parameters:**
- `organization_id`: Optional organization ID to filter by
- `response_format`: "markdown" (default) or "json"

### pipefy_create_card

Create a new card in a specific pipe.

**Parameters:**
- `pipe_id` (required): The pipe ID
- `fields` (required): List of field objects with `field_id` and `field_value`
- `title`: Optional card title
- `response_format`: "markdown" (default) or "json"

---

## Database Tables API

### pipefy_list_tables

List database tables from a specific organization.

**Parameters:**
- `organization_id` (required): The organization ID to list tables from
- `response_format`: "markdown" (default) or "json"

### pipefy_get_table

Get detailed information about a specific database table.

**Parameters:**
- `table_id` (required): The alphanumeric ID of the table (e.g., 'ZtEdWh')
- `response_format`: "markdown" (default) or "json"

**Returns:** Table details including fields, members, webhooks, and record count.

### pipefy_create_table

Create a new database table in an organization.

**Parameters:**
- `organization_id` (required): The organization ID where the table will be created
- `name` (required): The name for the new table
- `color`: Optional color for the table (e.g., 'blue', 'red', 'green', 'lime', 'yellow')
- `response_format`: "markdown" (default) or "json"

**Returns:** Details of the created table including its ID.

---

## Table Records API

### pipefy_list_table_records

List records from a database table.

**Parameters:**
- `table_id` (required): The alphanumeric ID of the table
- `limit`: Maximum records to return (1-50, default: 20)
- `response_format`: "markdown" (default) or "json"

### pipefy_get_table_record

Get detailed information about a specific table record.

**Parameters:**
- `record_id` (required): The numeric ID of the record
- `response_format`: "markdown" (default) or "json"

**Returns:** Comprehensive record details with all field values.

### pipefy_create_table_record

Create a new record in a database table.

**Parameters:**
- `table_id` (required): The alphanumeric ID of the table
- `title` (required): The title for the new record
- `fields`: List of field objects with `field_id` and `field_value`
- `response_format`: "markdown" (default) or "json"

**Returns:** Details of the created record including its ID.

## Development

### Project Structure

```
pipefy-mcp/
├── main.py              # Main server with all tools
├── pyproject.toml       # Project configuration
├── README.md            # This file
└── .cursor/skills/      # MCP builder skill reference
```

### Adding New Tools

Follow the pattern in `main.py`:
1. Define a Pydantic model for input validation
2. Use `@mcp.tool` decorator with proper annotations
3. Include comprehensive docstrings
4. Implement error handling with `_handle_api_error`
5. Support both response formats