mcp-server-openmetadata


Namemcp-server-openmetadata JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryModel Context Protocol (MCP) server for OpenMetadata
upload_time2025-02-19 15:09:00
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
keywords mcp metadata model-context-protocol openmetadata
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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](https://modelcontextprotocol.io/introduction) 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_API_TOKEN=<your-api-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)
```json
{
  "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
```json
{
  "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)
```json
{
  "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
```json
{
  "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:
```bash
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

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "mcp-server-openmetadata",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "mcp, metadata, model-context-protocol, openmetadata",
    "author": null,
    "author_email": "Gyeongmo Yang <me@gmyang.dev>",
    "download_url": "https://files.pythonhosted.org/packages/8b/4f/897651e67dddbde43621e69f2c4b30c58fc6104d7d4775c446cf09ccac0c/mcp_server_openmetadata-0.1.0.tar.gz",
    "platform": null,
    "description": "# mcp-server-openmetadata\n\nA 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.\n\n## About\n\nThis project implements a [Model Context Protocol](https://modelcontextprotocol.io/introduction) server that wraps OpenMetadata's REST API, allowing MCP clients to interact with OpenMetadata in a standardized way.\n\n## Feature Implementation Status\n\n| Feature | API Path | Status |\n|---------|----------|--------|\n| **Data Assets** | | |\n| List Databases | `/api/v1/databases` | \u274c |\n| Get Database | `/api/v1/databases/{id}` | \u274c |\n| Get Database by Name | `/api/v1/databases/name/{fqn}` | \u274c |\n| Export Database | `/api/v1/databases/name/{name}/export` | \u274c |\n| Import Database | `/api/v1/databases/name/{name}/import` | \u274c |\n| List Tables | `/api/v1/tables` | \u2705 |\n| Get Table | `/api/v1/tables/{id}` | \u2705 |\n| Get Table by Name | `/api/v1/tables/name/{fqn}` | \u2705 |\n| Create Table | `/api/v1/tables` | \u2705 |\n| Update Table | `/api/v1/tables/{id}` | \u2705 |\n| Delete Table | `/api/v1/tables/{id}` | \u2705 |\n| Export Table | `/api/v1/tables/name/{name}/export` | \u274c |\n| Import Table | `/api/v1/tables/name/{name}/import` | \u274c |\n| List Metrics | `/api/v1/metrics` | \u274c |\n| Get Metric | `/api/v1/metrics/{id}` | \u274c |\n| List Dashboards | `/api/v1/dashboards` | \u274c |\n| Get Dashboard | `/api/v1/dashboards/{id}` | \u274c |\n| Get Dashboard by Name | `/api/v1/dashboards/name/{fqn}` | \u274c |\n| List Reports | `/api/v1/reports` | \u274c |\n| Get Report | `/api/v1/reports/{id}` | \u274c |\n| List Pipelines | `/api/v1/pipelines` | \u274c |\n| Get Pipeline | `/api/v1/pipelines/{id}` | \u274c |\n| Get Pipeline by Name | `/api/v1/pipelines/name/{fqn}` | \u274c |\n| List Topics | `/api/v1/topics` | \u274c |\n| Get Topic | `/api/v1/topics/{id}` | \u274c |\n| **Services** | | |\n| List Database Services | `/api/v1/services/databaseServices` | \u274c |\n| Get Database Service | `/api/v1/services/databaseServices/{id}` | \u274c |\n| Get Database Service by Name | `/api/v1/services/databaseServices/name/{fqn}` | \u274c |\n| Export Database Service | `/api/v1/services/databaseServices/name/{name}/export` | \u274c |\n| Import Database Service | `/api/v1/services/databaseServices/name/{name}/import` | \u274c |\n| List Dashboard Services | `/api/v1/services/dashboardServices` | \u274c |\n| Get Dashboard Service | `/api/v1/services/dashboardServices/{id}` | \u274c |\n| Get Dashboard Service by Name | `/api/v1/services/dashboardServices/name/{fqn}` | \u274c |\n| **Teams & Users** | | |\n| List Teams | `/api/v1/teams` | \u274c |\n| Get Team | `/api/v1/teams/{id}` | \u274c |\n| Get Team by Name | `/api/v1/teams/name/{fqn}` | \u274c |\n| Export Team | `/api/v1/teams/name/{name}/export` | \u274c |\n| Import Team | `/api/v1/teams/name/{name}/import` | \u274c |\n| List Users | `/api/v1/users` | \u274c |\n| Get User | `/api/v1/users/{id}` | \u274c |\n| Get User by Name | `/api/v1/users/name/{name}` | \u274c |\n| User Login | `/api/v1/users/login` | \u274c |\n| User Logout | `/api/v1/users/logout` | \u274c |\n| User Signup | `/api/v1/users/signup` | \u274c |\n| Change Password | `/api/v1/users/changePassword` | \u274c |\n| **Search** | | |\n| Search Query | `/api/v1/search/query` | \u274c |\n| Search Suggest | `/api/v1/search/suggest` | \u274c |\n| Search Aggregate | `/api/v1/search/aggregate` | \u274c |\n| Field Query | `/api/v1/search/fieldQuery` | \u274c |\n| Get Document | `/api/v1/search/get/{index}/doc/{id}` | \u274c |\n| **Tags & Classifications** | | |\n| List Tags | `/api/v1/tags` | \u274c |\n| Get Tag | `/api/v1/tags/{id}` | \u274c |\n| Get Tag by Name | `/api/v1/tags/name/{fqn}` | \u274c |\n| **Lineage** | | |\n| Get Lineage | `/api/v1/lineage/getLineage` | \u274c |\n| Export Lineage | `/api/v1/lineage/export` | \u274c |\n| Get Entity Lineage by Name | `/api/v1/lineage/{entity}/name/{fqn}` | \u274c |\n| Get Entity Lineage by ID | `/api/v1/lineage/{entity}/{id}` | \u274c |\n| Get Lineage Edge | `/api/v1/lineage/getLineageEdge/{fromId}/{toId}` | \u274c |\n| Add/Update Lineage | `/api/v1/lineage` | \u274c |\n| Add/Update Lineage by FQN | `/api/v1/lineage/{fromEntity}/name/{fromFQN}/{toEntity}/name/{toFQN}` | \u274c |\n| Add/Update Lineage by ID | `/api/v1/lineage/{fromEntity}/{fromId}/{toEntity}/{toId}` | \u274c |\n| **Glossaries** | | |\n| List Glossaries | `/api/v1/glossaries` | \u274c |\n| Get Glossary | `/api/v1/glossaries/{id}` | \u274c |\n| Get Glossary by Name | `/api/v1/glossaries/name/{fqn}` | \u274c |\n| Export Glossary | `/api/v1/glossaries/name/{name}/export` | \u274c |\n| Import Glossary | `/api/v1/glossaries/name/{name}/import` | \u274c |\n| List Glossary Terms | `/api/v1/glossaryTerms` | \u274c |\n| Get Glossary Term | `/api/v1/glossaryTerms/{id}` | \u274c |\n| Get Glossary Term by Name | `/api/v1/glossaryTerms/name/{fqn}` | \u274c |\n| Add Assets to Term | `/api/v1/glossaryTerms/{id}/assets/add` | \u274c |\n| Remove Assets from Term | `/api/v1/glossaryTerms/{id}/assets/remove` | \u274c |\n| Validate Term Tags | `/api/v1/glossaryTerms/{id}/tags/validate` | \u274c |\n| **Usage** | | |\n| Get Entity Usage by Name | `/api/v1/usage/{entity}/name/{fqn}` | \u274c |\n| Get Entity Usage by ID | `/api/v1/usage/{entity}/{id}` | \u274c |\n\n## Setup\n\n### Environment Variables\n\nSet one of the following authentication methods:\n\n#### Token Authentication (Recommended)\n```\nOPENMETADATA_HOST=<your-openmetadata-host>\nOPENMETADATA_API_TOKEN=<your-api-token>\n```\n\n#### Basic Authentication\n```\nOPENMETADATA_HOST=<your-openmetadata-host>\nOPENMETADATA_USERNAME=<your-username>\nOPENMETADATA_PASSWORD=<your-password>\n```\n\n### Usage with Claude Desktop\n\nAdd to your `claude_desktop_config.json` using one of the following authentication methods:\n\n#### Token Authentication (Recommended)\n```json\n{\n  \"mcpServers\": {\n    \"mcp-server-openmetadata\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-server-openmetadata\"],\n      \"env\": {\n        \"OPENMETADATA_HOST\": \"https://your-openmetadata-host\",\n        \"OPENMETADATA_JWT_TOKEN\": \"your-jwt-token\"\n      }\n    }\n  }\n}\n```\n\n#### Basic Authentication\n```json\n{\n  \"mcpServers\": {\n    \"mcp-server-openmetadata\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-server-openmetadata\"],\n      \"env\": {\n        \"OPENMETADATA_HOST\": \"https://your-openmetadata-host\",\n        \"OPENMETADATA_USERNAME\": \"your-username\",\n        \"OPENMETADATA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nAlternative configuration using `uv`:\n\n#### Token Authentication (Recommended)\n```json\n{\n  \"mcpServers\": {\n    \"mcp-server-openmetadata\": {\n      \"command\": \"uv\",\n      \"args\": [\n        \"--directory\",\n        \"/path/to/mcp-server-openmetadata\",\n        \"run\",\n        \"mcp-server-openmetadata\"\n      ],\n      \"env\": {\n        \"OPENMETADATA_HOST\": \"https://your-openmetadata-host\",\n        \"OPENMETADATA_JWT_TOKEN\": \"your-jwt-token\"\n      }\n    }\n  }\n}\n```\n\n#### Basic Authentication\n```json\n{\n  \"mcpServers\": {\n    \"mcp-server-openmetadata\": {\n      \"command\": \"uv\",\n      \"args\": [\n        \"--directory\",\n        \"/path/to/mcp-server-openmetadata\",\n        \"run\",\n        \"mcp-server-openmetadata\"\n      ],\n      \"env\": {\n        \"OPENMETADATA_HOST\": \"https://your-openmetadata-host\",\n        \"OPENMETADATA_USERNAME\": \"your-username\",\n        \"OPENMETADATA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nReplace `/path/to/mcp-server-openmetadata` with the actual path where you've cloned the repository.\n\n### Manual Execution\n\nYou can also run the server manually:\n```bash\npython src/server.py\n```\n\nOptions:\n- `--port`: Port to listen on for SSE (default: 8000)\n- `--transport`: Transport type (stdio/sse, default: stdio)\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nMIT License\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Model Context Protocol (MCP) server for OpenMetadata",
    "version": "0.1.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/yangkyeongmo/mcp-server-openmetadata/issues",
        "Homepage": "https://github.com/yangkyeongmo/mcp-server-openmetadata",
        "Repository": "https://github.com/yangkyeongmo/mcp-server-openmetadata.git"
    },
    "split_keywords": [
        "mcp",
        " metadata",
        " model-context-protocol",
        " openmetadata"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "06eed256a7e58e00a700f6e47f5437e5295880d3f785c026e373ea0f6c05f51a",
                "md5": "e8960d030fcf013f89687a4328da9193",
                "sha256": "d6661b6df88d0ccaa9af10aa1e9568397d63fa6d973cfef8f89850939805227b"
            },
            "downloads": -1,
            "filename": "mcp_server_openmetadata-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e8960d030fcf013f89687a4328da9193",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 8871,
            "upload_time": "2025-02-19T15:08:58",
            "upload_time_iso_8601": "2025-02-19T15:08:58.744557Z",
            "url": "https://files.pythonhosted.org/packages/06/ee/d256a7e58e00a700f6e47f5437e5295880d3f785c026e373ea0f6c05f51a/mcp_server_openmetadata-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8b4f897651e67dddbde43621e69f2c4b30c58fc6104d7d4775c446cf09ccac0c",
                "md5": "5435b9eea5e4c2f2501fb9aab6c0533d",
                "sha256": "baf2ae0b5ac1855657f30a70756df6d7912059823d71809190b6b32bdb1ac096"
            },
            "downloads": -1,
            "filename": "mcp_server_openmetadata-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "5435b9eea5e4c2f2501fb9aab6c0533d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 6800,
            "upload_time": "2025-02-19T15:09:00",
            "upload_time_iso_8601": "2025-02-19T15:09:00.353099Z",
            "url": "https://files.pythonhosted.org/packages/8b/4f/897651e67dddbde43621e69f2c4b30c58fc6104d7d4775c446cf09ccac0c/mcp_server_openmetadata-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-19 15:09:00",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "yangkyeongmo",
    "github_project": "mcp-server-openmetadata",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "mcp-server-openmetadata"
}
        
Elapsed time: 0.77075s