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.
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 | 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} |
âś… |
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} |
âś… |
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} |
âś… |
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} |
âś… |
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 |
âś… |
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 |
âś… |
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 |
âś… |
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} |
âś… |
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} |
âś… |
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 |
❌ |
The server supports modular API group selection via command line arguments. Available API groups:
table
- Table entity managementdatabase
- Database entity managementdatabaseschema
- Database schema management
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
user
- User entity managementteam
- Team entity management
classification
- Classification entity managementglossary
- Glossary and glossary terms managementtag
- Tag and tag category management
bot
- Bot entity managementservices
- Service configurations and connection testingevent
- Event subscriptions and notifications
lineage
- Data lineage managementusage
- Usage analytics managementsearch
- Search and discovery operations
test_case
- Data quality test case managementtest_suite
- Data quality test suite management
policy
- Access policies and security managementrole
- Role-based access control 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
To install OpenMetadata MCP Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @yangkyeongmo/mcp-server-openmetadata --client claude
Set one of the following authentication methods:
OPENMETADATA_HOST=<your-openmetadata-host>
OPENMETADATA_JWT_TOKEN=<your-jwt-token>
OPENMETADATA_HOST=<your-openmetadata-host>
OPENMETADATA_USERNAME=<your-username>
OPENMETADATA_PASSWORD=<your-password>
Add to your claude_desktop_config.json
using one of the following authentication methods:
{
"mcpServers": {
"mcp-server-openmetadata": {
"command": "uvx",
"args": ["mcp-server-openmetadata"],
"env": {
"OPENMETADATA_HOST": "https://your-openmetadata-host",
"OPENMETADATA_JWT_TOKEN": "your-jwt-token"
}
}
}
}
{
"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
:
{
"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"
}
}
}
}
{
"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.
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)
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License