Integrate with OpenMetadata API
MCP server wrapping OpenMetadata's REST API across 27 selectable API groups - tables, lineage, data quality, governance, access control - via CRUD tools.
Maintainer of this project? Claim this page to edit the listing.
0.2.4Add to Favorites
Why it matters
Connect to your OpenMetadata instance to manage and interact with your data catalog. This asset provides standardized access to OpenMetadata's extensive API for comprehensive data governance and management.
Outcomes
What it gets done
Perform CRUD operations on core data entities like tables, databases, and schemas.
Manage various data resources including dashboards, pipelines, and ML models.
Handle user, team, and access control management.
Leverage data lineage, usage, and search capabilities.
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/vb-openmetadata | bash Capabilities
Tools your agent gets
List all tables from the OpenMetadata catalog
Retrieve detailed information about a specific table
Create a new table in the OpenMetadata catalog
Update an existing table's metadata and properties
Delete a table from the OpenMetadata catalog
List all databases in the OpenMetadata catalog
Retrieve detailed information about a specific database
List all database schemas in the OpenMetadata catalog
Overview
OpenMetadata MCP Server
An MCP server wrapping OpenMetadata's REST API with full CRUD across 27 selectable API groups covering core data entities, data assets, governance, data quality, access control, and domain management. Use for conversational OpenMetadata catalog management, lineage tracing, data quality review, and governance/access control. Enable only the API groups needed; several features (feeds, webhooks, stored procedures, personas) are not yet implemented.
What it does
A Model Context Protocol server that wraps OpenMetadata's REST API, letting MCP clients like Claude Desktop create, read, update, and delete metadata entities and run analytics/governance operations against an OpenMetadata instance in a standardized way, instead of calling the REST API directly.
Coverage is organized into nine API group categories, each independently enable-able at server startup. Core Data Entities covers full CRUD on tables, databases, and database schemas. Data Assets covers full CRUD on dashboards, charts, pipelines, topics, metrics, containers, reports, and ML models. Users & Teams covers full CRUD on teams and users. Governance & Classification covers classifications, glossaries and glossary terms, and tags. System & Operations covers bots, service configuration (database/dashboard/messaging services plus connection testing), and event subscriptions with a test-destination endpoint. Analytics & Monitoring covers lineage retrieval and updates by entity ID or fully qualified name, usage data retrieval and submission, and search operations (query, suggest, aggregate, field query). Data Quality covers test case and test suite CRUD, test case results, execution summaries, and data quality reports. Access Control & Security covers policy CRUD with condition validation and role-based access control. Domain Management covers domains and data products. Each entity generally supports list, get-by-ID, get-by-name, create, update, and delete operations. The project is explicit about gaps: API collections/endpoints, apps, activity feeds, personas, saved queries, search indexes, stored procedures, suggestions, and webhooks are documented as not yet implemented.
python -m src.main --apis table,database,databaseschema
API groups are selected via a --apis command-line argument at startup - a comma-separated list of group names (table, database, dashboard, lineage, test_case, policy, domain, and so on) - so a deployment only exposes the entity types it actually needs, rather than the full surface area by default.
When to use - and when NOT to
Use this connector when you want an AI assistant to browse, manage, or analyze metadata in an OpenMetadata catalog - inspecting table/database structure, tracing data lineage, reviewing data quality test results, managing glossaries and tags, or administering access policies and domains - through natural language instead of the OpenMetadata UI or raw REST calls. Since coverage is modular, check that the specific entity type needed is in the implemented list (not the "not yet implemented" list) before relying on it, and enable only the API groups actually required for a given deployment to limit surface area.
Capabilities
Full CRUD across 27 entity/API groups spanning core data catalog entities, data assets, users/teams, governance (classifications, glossaries, tags), system operations (bots, services, events), analytics (lineage, usage, search), data quality (test cases and suites), access control (policies, roles), and domain/data-product management - selectable per deployment via the --apis flag.
How to install
Install automatically for Claude Desktop via Smithery (npx -y @smithery/cli install @yangkyeongmo/mcp-server-openmetadata --client claude), or configure manually. Authenticate with either token auth (OPENMETADATA_HOST + OPENMETADATA_JWT_TOKEN, recommended) or basic auth (OPENMETADATA_HOST + OPENMETADATA_USERNAME + OPENMETADATA_PASSWORD), set in a claude_desktop_config.json mcpServers entry running via uvx mcp-server-openmetadata or a local uv/python invocation. It can also run manually via python src/server.py with --port (default 8000) and --transport (stdio or sse, default stdio) options.
Who it's for
Data platform teams and data engineers using OpenMetadata as their data catalog who want an AI assistant to browse metadata, trace lineage, review data quality, and manage governance and access control conversationally, with the flexibility to expose only the API groups a given deployment needs.
Source README
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)
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.
