mcp-server-openmetadata logo

mcp-server-openmetadata

by yangkyeongmo

This project implements a Model Context Protocol (MCP) server for OpenMetadata, enabling seamless integration with MCP clients. It provides a standardized way to interact with OpenMetadata through the Model Context Protocol.

View on GitHub

Last updated: N/A

mcp-server-openmetadata

A Model Context Protocol (MCP) server implementation for OpenMetadata, enabling seamless integration with MCP clients. This project provides a standardized way to interact with OpenMetadata through the Model Context Protocol.

<a href="https://glama.ai/mcp/servers/lvgl5cmxa6"> <img width="380" height="200" src="https://glama.ai/mcp/servers/lvgl5cmxa6/badge" alt="Server for OpenMetadata MCP server" /> </a>

About

This project implements a Model Context Protocol server that wraps OpenMetadata's REST API, allowing MCP clients to interact with OpenMetadata in a standardized way.

Feature Implementation Status

| Feature | API Path | Status | |---------|----------|--------| | Data Assets | | | | List Databases | /api/v1/databases | ❌ | | Get Database | /api/v1/databases/{id} | ❌ | | Get Database by Name | /api/v1/databases/name/{fqn} | ❌ | | Export Database | /api/v1/databases/name/{name}/export | ❌ | | Import Database | /api/v1/databases/name/{name}/import | ❌ | | List Tables | /api/v1/tables | ✅ | | Get Table | /api/v1/tables/{id} | ✅ | | Get Table by Name | /api/v1/tables/name/{fqn} | ✅ | | Create Table | /api/v1/tables | ✅ | | Update Table | /api/v1/tables/{id} | ✅ | | Delete Table | /api/v1/tables/{id} | ✅ | | Export Table | /api/v1/tables/name/{name}/export | ❌ | | Import Table | /api/v1/tables/name/{name}/import | ❌ | | List Metrics | /api/v1/metrics | ❌ | | Get Metric | /api/v1/metrics/{id} | ❌ | | List Dashboards | /api/v1/dashboards | ❌ | | Get Dashboard | /api/v1/dashboards/{id} | ❌ | | Get Dashboard by Name | /api/v1/dashboards/name/{fqn} | ❌ | | List Reports | /api/v1/reports | ❌ | | Get Report | /api/v1/reports/{id} | ❌ | | List Pipelines | /api/v1/pipelines | ❌ | | Get Pipeline | /api/v1/pipelines/{id} | ❌ | | Get Pipeline by Name | /api/v1/pipelines/name/{fqn} | ❌ | | List Topics | /api/v1/topics | ❌ | | Get Topic | /api/v1/topics/{id} | ❌ | | Services | | | | List Database Services | /api/v1/services/databaseServices | ❌ | | Get Database Service | /api/v1/services/databaseServices/{id} | ❌ | | Get Database Service by Name | /api/v1/services/databaseServices/name/{fqn} | ❌ | | Export Database Service | /api/v1/services/databaseServices/name/{name}/export | ❌ | | Import Database Service | /api/v1/services/databaseServices/name/{name}/import | ❌ | | List Dashboard Services | /api/v1/services/dashboardServices | ❌ | | Get Dashboard Service | /api/v1/services/dashboardServices/{id} | ❌ | | Get Dashboard Service by Name | /api/v1/services/dashboardServices/name/{fqn} | ❌ | | Teams & Users | | | | List Teams | /api/v1/teams | ❌ | | Get Team | /api/v1/teams/{id} | ❌ | | Get Team by Name | /api/v1/teams/name/{fqn} | ❌ | | Export Team | /api/v1/teams/name/{name}/export | ❌ | | Import Team | /api/v1/teams/name/{name}/import | ❌ | | List Users | /api/v1/users | ❌ | | Get User | /api/v1/users/{id} | ❌ | | Get User by Name | /api/v1/users/name/{name} | ❌ | | User Login | /api/v1/users/login | ❌ | | User Logout | /api/v1/users/logout | ❌ | | User Signup | /api/v1/users/signup | ❌ | | Change Password | /api/v1/users/changePassword | ❌ | | Search | | | | Search Query | /api/v1/search/query | ❌ | | Search Suggest | /api/v1/search/suggest | ❌ | | Search Aggregate | /api/v1/search/aggregate | ❌ | | Field Query | /api/v1/search/fieldQuery | ❌ | | Get Document | /api/v1/search/get/{index}/doc/{id} | ❌ | | Tags & Classifications | | | | List Tags | /api/v1/tags | ❌ | | Get Tag | /api/v1/tags/{id} | ❌ | | Get Tag by Name | /api/v1/tags/name/{fqn} | ❌ | | Lineage | | | | Get Lineage | /api/v1/lineage/getLineage | ❌ | | Export Lineage | /api/v1/lineage/export | ❌ | | Get Entity Lineage by Name | /api/v1/lineage/{entity}/name/{fqn} | ❌ | | Get Entity Lineage by ID | /api/v1/lineage/{entity}/{id} | ❌ | | Get Lineage Edge | /api/v1/lineage/getLineageEdge/{fromId}/{toId} | ❌ | | Add/Update Lineage | /api/v1/lineage | ❌ | | Add/Update Lineage by FQN | /api/v1/lineage/{fromEntity}/name/{fromFQN}/{toEntity}/name/{toFQN} | ❌ | | Add/Update Lineage by ID | /api/v1/lineage/{fromEntity}/{fromId}/{toEntity}/{toId} | ❌ | | Glossaries | | | | List Glossaries | /api/v1/glossaries | ❌ | | Get Glossary | /api/v1/glossaries/{id} | ❌ | | Get Glossary by Name | /api/v1/glossaries/name/{fqn} | ❌ | | Export Glossary | /api/v1/glossaries/name/{name}/export | ❌ | | Import Glossary | /api/v1/glossaries/name/{name}/import | ❌ | | List Glossary Terms | /api/v1/glossaryTerms | ❌ | | Get Glossary Term | /api/v1/glossaryTerms/{id} | ❌ | | Get Glossary Term by Name | /api/v1/glossaryTerms/name/{fqn} | ❌ | | Add Assets to Term | /api/v1/glossaryTerms/{id}/assets/add | ❌ | | Remove Assets from Term | /api/v1/glossaryTerms/{id}/assets/remove | ❌ | | Validate Term Tags | /api/v1/glossaryTerms/{id}/tags/validate | ❌ | | Usage | | | | Get Entity Usage by Name | /api/v1/usage/{entity}/name/{fqn} | ❌ | | Get Entity Usage by ID | /api/v1/usage/{entity}/{id} | ❌ |

Setup

Environment Variables

Set one of the following authentication methods:

Token Authentication (Recommended)
OPENMETADATA_HOST=<your-openmetadata-host>
OPENMETADATA_JWT_TOKEN=<your-jwt-token>
Basic Authentication
OPENMETADATA_HOST=<your-openmetadata-host>
OPENMETADATA_USERNAME=<your-username>
OPENMETADATA_PASSWORD=<your-password>

Usage with Claude Desktop

Add to your claude_desktop_config.json using one of the following authentication methods:

Token Authentication (Recommended)
{
  "mcpServers": {
    "mcp-server-openmetadata": {
      "command": "uvx",
      "args": ["mcp-server-openmetadata"],
      "env": {
        "OPENMETADATA_HOST": "https://your-openmetadata-host",
        "OPENMETADATA_JWT_TOKEN": "your-jwt-token"
      }
    }
  }
}
Basic Authentication
{
  "mcpServers": {
    "mcp-server-openmetadata": {
      "command": "uvx",
      "args": ["mcp-server-openmetadata"],
      "env": {
        "OPENMETADATA_HOST": "https://your-openmetadata-host",
        "OPENMETADATA_USERNAME": "your-username",
        "OPENMETADATA_PASSWORD": "your-password"
      }
    }
  }
}

Alternative configuration using uv:

Token Authentication (Recommended)
{
  "mcpServers": {
    "mcp-server-openmetadata": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/mcp-server-openmetadata",
        "run",
        "mcp-server-openmetadata"
      ],
      "env": {
        "OPENMETADATA_HOST": "https://your-openmetadata-host",
        "OPENMETADATA_JWT_TOKEN": "your-jwt-token"
      }
    }
  }
}
Basic Authentication
{
  "mcpServers": {
    "mcp-server-openmetadata": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/mcp-server-openmetadata",
        "run",
        "mcp-server-openmetadata"
      ],
      "env": {
        "OPENMETADATA_HOST": "https://your-openmetadata-host",
        "OPENMETADATA_USERNAME": "your-username",
        "OPENMETADATA_PASSWORD": "your-password"
      }
    }
  }
}

Replace /path/to/mcp-server-openmetadata with the actual path where you've cloned the repository.

Manual Execution

You can also run the server manually:

python src/server.py

Options:

  • --port: Port to listen on for SSE (default: 8000)
  • --transport: Transport type (stdio/sse, default: stdio)

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License