OpenRefine MCP Server
README.md
# OpenRefine MCP Server
[](https://github.com/FiquemSabendo/openrefine_mcp/actions/workflows/test.yml)
A Model Context Protocol (MCP) server that provides a typed, discoverable interface to OpenRefine's HTTP API. This allows any MCP-capable client (like Claude Desktop) to orchestrate data-cleaning pipelines safely and reproducibly.
## Installation
### Prerequisites
- Python 3.13 or higher
- [uv](https://docs.astral.sh/uv/) package manager
- OpenRefine instance running (default: `http://localhost:3333`)
### Install the Package
```bash
# Clone the repository
git clone <repository-url>
cd openrefine_mcp
# Install dependencies using uv
uv sync
```
### Setup Claude Desktop
1. Create or edit your Claude Desktop configuration file:
```bash
# On macOS/Linux
~/.config/claude_desktop_config.json
# On Windows
%APPDATA%\claude_desktop_config.json
```
2. Add the OpenRefine MCP server to your configuration:
```json
{
"mcpServers": {
"openrefine": {
"command": "uv",
"args": [
"--directory",
"path/to/your/openrefine_mcp",
"run",
"openrefine-mcp-server"
],
"env": {
"OPENREFINE_URL": "http://localhost:3333"
}
}
}
}
```
3. Restart Claude Desktop to load the new MCP server.
## Features
This MCP server implements the following OpenRefine API endpoints:
| OpenRefine API Endpoint | MCP Implementation | Status |
|-------------------------|-------------------|---------|
| `POST /command/core/create-project-from-upload` | `create_project(dataset_url: str, name: str \| None = None)` | ✅ |
| `GET /command/core/get-models` | `get_project_models(project_id: int)` resource | ✅ |
| `POST /command/core/apply-operations` | `apply_operations(project_id: int, operations: str)` | ✅ |
| `POST /command/core/export-rows` | `export_csv(project_id: int)` | ✅ |
| `POST /command/core/delete-project` | `delete_project(project_id: int)` | ✅ |
| `POST /command/core/set-project-metadata` | - | ❌ |
| `POST /command/core/set-project-tags` | - | ❌ |
| `GET /command/core/get-all-project-metadata` | - | ❌ |
| `POST /command/core/preview-expression` | - | ❌ |
| `GET /command/core/get-processes` | - | ❌ |
### Available Tools
- **`create_project(dataset_url: str, name: str | None = None)`** → Creates a new OpenRefine project from a dataset URL
- **`apply_operations(project_id: int, operations: str)`** → Applies operations to an OpenRefine project
- **`export_csv(project_id: int)`** → Exports CSV data from an OpenRefine project
- **`delete_project(project_id: int)`** → Deletes an OpenRefine project
### Available Resources
- **`openrefine://project/{project_id}/models`** → Returns structural information about the project including column definitions, record model configuration, available scripting languages, and overlay models
## Development
### Running Tests
```bash
make test
```
### Running the MCP Inspector server
```bash
make inspector
```
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
TDQS
A3.6/5.0
Scored across 4 tools
Disambiguation5/5
Each tool targets a distinct action: creation, deletion, operation application, and export. No overlap in purpose.
Naming Consistency5/5
All tools follow a consistent verb_noun snake_case pattern (apply_operations, create_project, etc.).
Tool Count4/5
4 tools is a minimal set for OpenRefine, but it covers basic project lifecycle and export. Could benefit from a project listing tool.
Completeness2/5
Missing core OpenRefine capabilities like project listing, faceting, or data transformation operations beyond generic apply_operations.
Maintenance
ActivityInactive
ResponsivenessNo issues