MCP Server for OpenMetadata
Enables integration with OpenMetadata by wrapping its REST API for standardized interaction through the Model Context Protocol.
README Documentation
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.
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
Core Data Entities (table, database, databaseschema)
| Feature | API Path | Status |
|---|---|---|
| Tables | ||
| 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} | ✅ |
| Databases | ||
| List Databases | /api/v1/databases | ✅ |
| Get Database | /api/v1/databases/{id} | ✅ |
| Get Database by Name | /api/v1/databases/name/{fqn} | ✅ |
| Create Database | /api/v1/databases | ✅ |
| Update Database | /api/v1/databases/{id} | ✅ |
| Delete Database | /api/v1/databases/{id} | ✅ |
| Database Schemas | ||
| List Database Schemas | /api/v1/databaseSchemas | ✅ |
| Get Database Schema | /api/v1/databaseSchemas/{id} | ✅ |
| Get Database Schema by Name | /api/v1/databaseSchemas/name/{fqn} | ✅ |
| Create Database Schema | /api/v1/databaseSchemas | ✅ |
| Update Database Schema | /api/v1/databaseSchemas/{id} | ✅ |
| Delete Database Schema | /api/v1/databaseSchemas/{id} | ✅ |
Data Assets (dashboard, chart, pipeline, topic, metric, container, report, mlmodel)
| Feature | API Path | Status |
|---|---|---|
| Dashboards | ||
| List Dashboards | /api/v1/dashboards | ✅ |
| Get Dashboard | /api/v1/dashboards/{id} | ✅ |
| Get Dashboard by Name | /api/v1/dashboards/name/{fqn} | ✅ |
| Create Dashboard | /api/v1/dashboards | ✅ |
| Update Dashboard | /api/v1/dashboards/{id} | ✅ |
| Delete Dashboard | /api/v1/dashboards/{id} | ✅ |
| Charts | ||
| List Charts | /api/v1/charts | ✅ |
| Get Chart | /api/v1/charts/{id} | ✅ |
| Get Chart by Name | /api/v1/charts/name/{fqn} | ✅ |
| Create Chart | /api/v1/charts | ✅ |
| Update Chart | /api/v1/charts/{id} | ✅ |
| Delete Chart | /api/v1/charts/{id} | ✅ |
| Pipelines | ||
| List Pipelines | /api/v1/pipelines | ✅ |
| Get Pipeline | /api/v1/pipelines/{id} | ✅ |
| Get Pipeline by Name | /api/v1/pipelines/name/{fqn} | ✅ |
| Create Pipeline | /api/v1/pipelines | ✅ |
| Update Pipeline | /api/v1/pipelines/{id} | ✅ |
| Delete Pipeline | /api/v1/pipelines/{id} | ✅ |
| Topics | ||
| List Topics | /api/v1/topics | ✅ |
| Get Topic | /api/v1/topics/{id} | ✅ |
| Get Topic by Name | /api/v1/topics/name/{fqn} | ✅ |
| Create Topic | /api/v1/topics | ✅ |
| Update Topic | /api/v1/topics/{id} | ✅ |
| Delete Topic | /api/v1/topics/{id} | ✅ |
| Metrics | ||
| List Metrics | /api/v1/metrics | ✅ |
| Get Metric | /api/v1/metrics/{id} | ✅ |
| Get Metric by Name | /api/v1/metrics/name/{fqn} | ✅ |
| Create Metric | /api/v1/metrics | ✅ |
| Update Metric | /api/v1/metrics/{id} | ✅ |
| Delete Metric | /api/v1/metrics/{id} | ✅ |
| Containers | ||
| List Containers | /api/v1/containers | ✅ |
| Get Container | /api/v1/containers/{id} | ✅ |
| Get Container by Name | /api/v1/containers/name/{fqn} | ✅ |
| Create Container | /api/v1/containers | ✅ |
| Update Container | /api/v1/containers/{id} | ✅ |
| Delete Container | /api/v1/containers/{id} | ✅ |
| Reports | ||
| List Reports | /api/v1/reports | ✅ |
| Get Report | /api/v1/reports/{id} | ✅ |
| Get Report by Name | /api/v1/reports/name/{fqn} | ✅ |
| Create Report | /api/v1/reports | ✅ |
| Update Report | /api/v1/reports/{id} | ✅ |
| Delete Report | /api/v1/reports/{id} | ✅ |
| ML Models | ||
| List ML Models | /api/v1/mlmodels | ✅ |
| Get ML Model | /api/v1/mlmodels/{id} | ✅ |
| Get ML Model by Name | /api/v1/mlmodels/name/{fqn} | ✅ |
| Create ML Model | /api/v1/mlmodels | ✅ |
| Update ML Model | /api/v1/mlmodels/{id} | ✅ |
| Delete ML Model | /api/v1/mlmodels/{id} | ✅ |
Users & Teams (user, team)
| Feature | API Path | Status |
|---|---|---|
| Teams | ||
| List Teams | /api/v1/teams | ✅ |
| Get Team | /api/v1/teams/{id} | ✅ |
| Get Team by Name | /api/v1/teams/name/{name} | ✅ |
| Create Team | /api/v1/teams | ✅ |
| Update Team | /api/v1/teams/{id} | ✅ |
| Delete Team | /api/v1/teams/{id} | ✅ |
| Users | ||
| List Users | /api/v1/users | ✅ |
| Get User | /api/v1/users/{id} | ✅ |
| Get User by Name | /api/v1/users/name/{name} | ✅ |
| Create User | /api/v1/users | ✅ |
| Update User | /api/v1/users/{id} | ✅ |
| Delete User | /api/v1/users/{id} | ✅ |
Governance & Classification (classification, glossary, tag)
| Feature | API Path | Status |
|---|---|---|
| Classifications | ||
| List Classifications | /api/v1/classifications | ✅ |
| Get Classification | /api/v1/classifications/{id} | ✅ |
| Get Classification by Name | /api/v1/classifications/name/{name} | ✅ |
| Create Classification | /api/v1/classifications | ✅ |
| Update Classification | /api/v1/classifications/{id} | ✅ |
| Delete Classification | /api/v1/classifications/{id} | ✅ |
| Glossaries | ||
| List Glossaries | /api/v1/glossaries | ✅ |
| Get Glossary | /api/v1/glossaries/{id} | ✅ |
| Get Glossary by Name | /api/v1/glossaries/name/{name} | ✅ |
| Create Glossary | /api/v1/glossaries | ✅ |
| Update Glossary | /api/v1/glossaries/{id} | ✅ |
| Delete Glossary | /api/v1/glossaries/{id} | ✅ |
| List Glossary Terms | /api/v1/glossaryTerms | ✅ |
| Get Glossary Term | /api/v1/glossaryTerms/{id} | ✅ |
| Tags | ||
| List Tags | /api/v1/tags | ✅ |
| Get Tag | /api/v1/tags/{id} | ✅ |
| Get Tag by Name | /api/v1/tags/name/{name} | ✅ |
| Create Tag | /api/v1/tags | ✅ |
| Update Tag | /api/v1/tags/{id} | ✅ |
| Delete Tag | /api/v1/tags/{id} | ✅ |
System & Operations (bot, services, event)
| Feature | API Path | Status |
|---|---|---|
| Bots | ||
| List Bots | /api/v1/bots | ✅ |
| Get Bot | /api/v1/bots/{id} | ✅ |
| Get Bot by Name | /api/v1/bots/name/{name} | ✅ |
| Create Bot | /api/v1/bots | ✅ |
| Update Bot | /api/v1/bots/{id} | ✅ |
| Delete Bot | /api/v1/bots/{id} | ✅ |
| Services | ||
| List Services | /api/v1/services | ✅ |
| Database Services | /api/v1/services/databaseServices | ✅ |
| Dashboard Services | /api/v1/services/dashboardServices | ✅ |
| Messaging Services | /api/v1/services/messagingServices | ✅ |
| Test Connection | /api/v1/services/testConnection | ✅ |
| Events | ||
| List Events | /api/v1/events | ✅ |
| List Event Subscriptions | /api/v1/events/subscriptions | ✅ |
| Get Event Subscription | /api/v1/events/subscriptions/{id} | ✅ |
| Create Event Subscription | /api/v1/events/subscriptions | ✅ |
| Update Event Subscription | /api/v1/events/subscriptions/{id} | ✅ |
| Delete Event Subscription | /api/v1/events/subscriptions/{id} | ✅ |
| Test Destination | /api/v1/events/subscriptions/testDestination | ✅ |
Analytics & Monitoring (lineage, usage, search)
| Feature | API Path | Status |
|---|---|---|
| Lineage | ||
| Get Lineage by Entity ID | /api/v1/lineage/{entity}/{id} | ✅ |
| Get Lineage by Entity Name | /api/v1/lineage/{entity}/name/{fqn} | ✅ |
| Add/Update Lineage | /api/v1/lineage | ✅ |
| Delete Lineage | /api/v1/lineage | ✅ |
| Usage | ||
| Get Entity Usage | /api/v1/usage/{entity}/{id} | ✅ |
| Add Usage Data | /api/v1/usage | ✅ |
| Get Usage Summary | /api/v1/usage/summary | ✅ |
| Search & Discovery | ||
| Search Query | /api/v1/search/query | ✅ |
| Search Suggest | /api/v1/search/suggest | ✅ |
| Search Aggregate | /api/v1/search/aggregate | ✅ |
| Search Field Query | /api/v1/search/fieldQuery | ✅ |
Data Quality (test_case, test_suite)
| Feature | API Path | Status |
|---|---|---|
| Test Cases | ||
| List Test Cases | /api/v1/dataQuality/testCases | ✅ |
| Get Test Case | /api/v1/dataQuality/testCases/{id} | ✅ |
| Get Test Case by Name | /api/v1/dataQuality/testCases/name/{fqn} | ✅ |
| Create Test Case | /api/v1/dataQuality/testCases | ✅ |
| Update Test Case | /api/v1/dataQuality/testCases/{id} | ✅ |
| Delete Test Case | /api/v1/dataQuality/testCases/{id} | ✅ |
| List Test Case Results | /api/v1/dataQuality/testCases/{fqn}/testCaseResult | ✅ |
| Get Test Case Results | /api/v1/dataQuality/testCases/testCaseResults/{fqn} | ✅ |
| Test Suites | ||
| List Test Suites | /api/v1/dataQuality/testSuites | ✅ |
| Get Test Suite | /api/v1/dataQuality/testSuites/{id} | ✅ |
| Get Test Suite by Name | /api/v1/dataQuality/testSuites/name/{name} | ✅ |
| Create Basic Test Suite | /api/v1/dataQuality/testSuites/basic | ✅ |
| Create Executable Test Suite | /api/v1/dataQuality/testSuites/executable | ✅ |
| Update Test Suite | /api/v1/dataQuality/testSuites/{id} | ✅ |
| Delete Test Suite | /api/v1/dataQuality/testSuites/{id} | ✅ |
| Get Execution Summary | /api/v1/dataQuality/testSuites/executionSummary | ✅ |
| Get Data Quality Report | /api/v1/dataQuality/testSuites/dataQualityReport | ✅ |
Access Control & Security (policy, role)
| Feature | API Path | Status |
|---|---|---|
| Policies | ||
| List Policies | /api/v1/policies | ✅ |
| Get Policy | /api/v1/policies/{id} | ✅ |
| Get Policy by Name | /api/v1/policies/name/{name} | ✅ |
| Create Policy | /api/v1/policies | ✅ |
| Update Policy | /api/v1/policies/{id} | ✅ |
| Delete Policy | /api/v1/policies/{id} | ✅ |
| Validate Policy | /api/v1/policies/validation/condition | ✅ |
| List Policy Resources | /api/v1/policies/resources | ✅ |
| Roles | ||
| List Roles | /api/v1/roles | ✅ |
| Get Role | /api/v1/roles/{id} | ✅ |
| Get Role by Name | /api/v1/roles/name/{name} | ✅ |
| Create Role | /api/v1/roles | ✅ |
| Update Role | /api/v1/roles/{id} | ✅ |
| Delete Role | /api/v1/roles/{id} | ✅ |
Domain Management (domain)
| Feature | API Path | Status |
|---|---|---|
| Domains | ||
| List Domains | /api/v1/domains | ✅ |
| Get Domain | /api/v1/domains/{id} | ✅ |
| Get Domain by Name | /api/v1/domains/name/{name} | ✅ |
| Create Domain | /api/v1/domains | ✅ |
| Update Domain | /api/v1/domains/{id} | ✅ |
| Delete Domain | /api/v1/domains/{id} | ✅ |
| Data Products | ||
| List Data Products | /api/v1/dataProducts | ✅ |
| Get Data Product | /api/v1/dataProducts/{id} | ✅ |
| Get Data Product by Name | /api/v1/dataProducts/name/{fqn} | ✅ |
| Create Data Product | /api/v1/dataProducts | ✅ |
| Update Data Product | /api/v1/dataProducts/{id} | ✅ |
| Delete Data Product | /api/v1/dataProducts/{id} | ✅ |
Not Yet Implemented
| Feature | API Path | Status |
|---|---|---|
| API Management | ||
| API Collections | /api/v1/apiCollections | ❌ |
| API Endpoints | /api/v1/apiEndpoints | ❌ |
| Other Assets | ||
| Apps | /api/v1/apps | ❌ |
| Feeds & Activity | ||
| Feeds | /api/v1/feed | ❌ |
| Advanced Features | ||
| Personas | /api/v1/personas | ❌ |
| Queries | /api/v1/queries | ❌ |
| Search Indexes | /api/v1/searchIndexes | ❌ |
| Stored Procedures | /api/v1/storedProcedures | ❌ |
| Suggestions | /api/v1/suggestions | ❌ |
| Webhooks | /api/v1/webhooks | ❌ |
API Groups
The server supports modular API group selection via command line arguments. Available API groups:
Core Data Entities
table- Table entity managementdatabase- Database entity managementdatabaseschema- Database schema management
Data Assets
dashboard- Dashboard entity managementchart- Chart entity managementpipeline- Pipeline entity managementtopic- Topic entity managementmetrics- Metric entity managementcontainer- Container entity managementreport- Report entity managementmlmodel- ML Model entity management
Users & Teams
user- User entity managementteam- Team entity management
Governance & Classification
classification- Classification entity managementglossary- Glossary and glossary terms managementtag- Tag and tag category management
System & Operations
bot- Bot entity managementservices- Service configurations and connection testingevent- Event subscriptions and notifications
Analytics & Monitoring
lineage- Data lineage managementusage- Usage analytics managementsearch- Search and discovery operations
Data Quality
test_case- Data quality test case managementtest_suite- Data quality test suite management
Access Control & Security
policy- Access policies and security managementrole- Role-based access control management
Domain Management
domain- Domain and data product management
You can specify which API groups to enable when running the server:
# Enable only core entities
python -m src.main --apis table,database,databaseschema
# Enable comprehensive data quality and governance
python -m src.main --apis test_case,test_suite,policy,role,tag,domain
# Enable all available APIs
python -m src.main --apis table,database,databaseschema,dashboard,chart,pipeline,topic,metrics,container,report,mlmodel,user,team,classification,glossary,tag,bot,services,event,lineage,usage,search,test_case,test_suite,policy,role,domain
# Use default selection (all implemented APIs)
python -m src.main
Setup
Installing via Smithery
To install OpenMetadata MCP Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @yangkyeongmo/mcp-server-openmetadata --client claude
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
