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.mainTo install OpenMetadata MCP Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @yangkyeongmo/mcp-server-openmetadata --client claudeSet 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.pyOptions:
--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
