npm package: @filefeed/mcp-server
Description: MCP Server for FileFeed — expose all FileFeed SDK capabilities as Model Context Protocol tools
Latest version: 1.0.0

# @filefeed/mcp-server

MCP (Model Context Protocol) Server for FileFeed. Exposes all FileFeed SDK capabilities as MCP tools, enabling AI assistants like Claude Desktop, Cursor, and VS Code Copilot to manage your FileFeed pipelines, clients, schemas, webhooks, and data.

## Quick Start

### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "filefeed": {
      "command": "npx",
      "args": ["@filefeed/mcp-server"],
      "env": {
        "FILEFEED_API_KEY": "your-api-key"
      }
    }
  }
}
```

### Cursor

Add to your Cursor MCP settings:

```json
{
  "mcpServers": {
    "filefeed": {
      "command": "npx",
      "args": ["@filefeed/mcp-server"],
      "env": {
        "FILEFEED_API_KEY": "your-api-key"
      }
    }
  }
}
```

### VS Code

Add to your VS Code MCP settings:

```json
{
  "mcp": {
    "servers": {
      "filefeed": {
        "command": "npx",
        "args": ["@filefeed/mcp-server"],
        "env": {
          "FILEFEED_API_KEY": "your-api-key"
        }
      }
    }
  }
}
```

## Configuration

| Environment Variable | Required | Default | Description |
|---------------------|----------|---------|-------------|
| `FILEFEED_API_KEY` | Yes | — | Your FileFeed API key |
| `FILEFEED_BASE_URL` | No | `https://api.sftpsync.io` | API base URL |
| `FILEFEED_TIMEOUT_MS` | No | `30000` | Request timeout in milliseconds |

You can also pass the API key via CLI flag:

```bash
filefeed-mcp --api-key your-api-key
```

## Available Tools (38)

All tools are registered using the current `registerTool()` API with proper `title`, `description`, `inputSchema` (Zod), and `annotations` (`readOnlyHint`, `destructiveHint`, `idempotentHint`) for MCP-aware clients.

### Clients (6 tools)
| Tool | Annotations | Description |
|------|------------|-------------|
| `clients_list` | read-only | List all SFTP clients in the workspace |
| `clients_retrieve` | read-only | Get a single client by ID |
| `clients_create` | — | Create a new SFTP client |
| `clients_update` | idempotent | Update an existing client |
| `clients_remove` | destructive | Delete a client |
| `clients_test_connection` | read-only | Test SFTP connectivity for a client |

### Schemas (6 tools)
| Tool | Annotations | Description |
|------|------------|-------------|
| `schemas_list` | read-only | List all data schemas |
| `schemas_retrieve` | read-only | Get a single schema by ID |
| `schemas_create` | — | Create a new schema with field definitions |
| `schemas_update` | idempotent | Update an existing schema |
| `schemas_remove` | destructive | Delete a schema |
| `schemas_validate` | read-only | Validate data against a schema |

### Pipelines (6 tools)
| Tool | Annotations | Description |
|------|------------|-------------|
| `pipelines_list` | read-only | List all pipelines (filterable by client) |
| `pipelines_retrieve` | read-only | Get a single pipeline by ID |
| `pipelines_create` | — | Create a new pipeline with field mappings |
| `pipelines_update` | idempotent | Update an existing pipeline |
| `pipelines_remove` | destructive | Delete a pipeline |
| `pipelines_toggle_active` | — | Toggle pipeline active/inactive status |

### Pipeline Runs (8 tools)
| Tool | Annotations | Description |
|------|------------|-------------|
| `pipeline_runs_list` | read-only | List runs with filtering (status, client, pipeline) |
| `pipeline_runs_retrieve` | read-only | Get a single run by ID |
| `pipeline_runs_get_data` | read-only | Get processed data from a run (paginated) |
| `pipeline_runs_ack` | idempotent | Acknowledge a run as consumed |
| `pipeline_runs_reprocess` | — | Reprocess a failed run |
| `pipeline_runs_get_original_url` | read-only | Get presigned URL for original file |
| `pipeline_runs_get_processed_url` | read-only | Get presigned URL for processed file |
| `pipeline_runs_get_by_pipeline` | read-only | List runs for a specific pipeline |

### Webhooks (6 tools)
| Tool | Annotations | Description |
|------|------------|-------------|
| `webhooks_list` | read-only | List all webhooks |
| `webhooks_retrieve` | read-only | Get a single webhook by ID |
| `webhooks_create` | — | Create a new webhook |
| `webhooks_update` | idempotent | Update an existing webhook |
| `webhooks_remove` | destructive | Delete a webhook |
| `webhooks_list_deliveries` | read-only | List webhook delivery attempts |

### Outbound (6 tools)
| Tool | Annotations | Description |
|------|------------|-------------|
| `outbound_init_upload` | — | Initialize a multipart upload session |
| `outbound_upload_part` | — | Upload a data chunk |
| `outbound_complete_upload` | — | Complete and trigger processing |
| `outbound_abort_upload` | destructive | Abort an upload session |
| `outbound_get_upload_status` | read-only | Check upload progress |
| `outbound_upload_json` | — | Upload JSON data (auto-chunked convenience method) |

## Development

```bash
# Install dependencies
npm install

# Build
npm run build

# Type check
npm run typecheck

# Run locally
FILEFEED_API_KEY=your-key npm start
```

## License

MIT