OpenMetadata MCP Servers API
`MCP Servers` are Model Context Protocol servers that expose tools, resources, and prompts for AI applications. They enable AI governance including risk assessment, compliance tracking, and shadow AI detection.
`MCP Servers` are Model Context Protocol servers that expose tools, resources, and prompts for AI applications. They enable AI governance including risk assessment, compliance tracking, and shadow AI detection.
openapi: 3.0.1
info:
title: OpenMetadata APIs Agent Executions MCP Servers API
description: Common types and API definition for OpenMetadata
contact:
name: OpenMetadata
url: https://open-metadata.org
email: openmetadata-dev@googlegroups.com
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0
version: '1.13'
servers:
- url: /api
description: Current Host
- url: http://localhost:8585/api
description: Endpoint URL
security:
- BearerAuth: []
tags:
- name: MCP Servers
description: '`MCP Servers` are Model Context Protocol servers that expose tools, resources, and prompts for AI applications. They enable AI governance including risk assessment, compliance tracking, and shadow AI detection.'
paths:
/v1/mcpServers/{id}/followers:
put:
tags:
- MCP Servers
summary: Add a follower
description: Add a user identified by `userId` as follower of this MCP server
operationId: addFollower_3
parameters:
- name: id
in: path
description: Id of the MCP Server
required: true
schema:
type: string
format: uuid
requestBody:
description: Id of the user to be added as follower
content:
application/json:
schema:
type: string
format: uuid
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ChangeEvent'
'404':
description: MCP Server for instance {id} is not found
/v1/mcpServers:
get:
tags:
- MCP Servers
summary: List MCP servers
description: Get a list of MCP servers. Use `fields` parameter to get only necessary fields. Use cursor-based pagination to limit the number of entries in the list using `limit` and `before` or `after` query params.
operationId: listMcpServers
parameters:
- name: fields
in: query
description: Fields requested in the returned resource
schema:
type: string
example: owners,followers,tags,extension,domains,tools,resources,prompts,service
- name: limit
in: query
description: Limit the number of servers returned. (1 to 1000000, default = 10)
schema:
maximum: 1000000
minimum: 0
type: integer
format: int32
default: 10
- name: before
in: query
description: Returns list of servers before this cursor
schema:
type: string
- name: after
in: query
description: Returns list of servers after this cursor
schema:
type: string
- name: include
in: query
description: Include all, deleted, or non-deleted entities.
schema:
type: string
default: non-deleted
enum:
- all
- deleted
- non-deleted
responses:
'200':
description: List of MCP servers
content:
application/json:
schema:
$ref: '#/components/schemas/McpServerList'
put:
tags:
- MCP Servers
summary: Create or update an MCP server
description: Create a new MCP server, if it does not exist or update an existing server.
operationId: createOrUpdateMcpServer
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateMcpServer'
responses:
'200':
description: The MCP server
content:
application/json:
schema:
$ref: '#/components/schemas/McpServer'
'400':
description: Bad request
post:
tags:
- MCP Servers
summary: Create an MCP server
description: Create a new MCP server.
operationId: createMcpServer
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateMcpServer'
responses:
'200':
description: MCP Server
content:
application/json:
schema:
$ref: '#/components/schemas/McpServer'
'400':
description: Bad request
/v1/mcpServers/name/{fqn}:
get:
tags:
- MCP Servers
summary: Get an MCP server by fully qualified name
description: Get an MCP server by fully qualified name.
operationId: getMcpServerByFQN
parameters:
- name: fqn
in: path
description: Fully qualified name of MCP Server
required: true
schema:
type: string
- name: fields
in: query
description: Fields requested in the returned resource
schema:
type: string
example: owners,followers,tags,extension,domains,tools,resources,prompts,service
- name: include
in: query
description: Include all, deleted, or non-deleted entities.
schema:
type: string
default: non-deleted
enum:
- all
- deleted
- non-deleted
- name: includeRelations
in: query
description: 'Per-relation include control. Format: field:value,field2:value2. Example: owners:non-deleted,followers:all. Valid values: all, deleted, non-deleted. If not specified for a field, uses the entity''s include value.'
schema:
type: string
example: owners:non-deleted,followers:all
responses:
'200':
description: The MCP server
content:
application/json:
schema:
$ref: '#/components/schemas/McpServer'
'404':
description: MCP Server for instance {fqn} is not found
delete:
tags:
- MCP Servers
summary: Delete an MCP server by fully qualified name
description: Delete an MCP server by `fullyQualifiedName`.
operationId: deleteMcpServerByFQN
parameters:
- name: hardDelete
in: query
description: Hard delete the entity. (Default = `false`)
schema:
type: boolean
default: false
- name: recursive
in: query
description: Recursively delete this entity and it's children. (Default `false`)
schema:
type: boolean
default: false
- name: fqn
in: path
description: Name of the MCP Server
required: true
schema:
type: string
responses:
'200':
description: OK
'404':
description: MCP Server for instance {fqn} is not found
patch:
tags:
- MCP Servers
summary: Update an MCP server by name
description: Update an existing MCP server using JsonPatch.
externalDocs:
description: JsonPatch RFC
url: https://tools.ietf.org/html/rfc6902
operationId: patchMcpServerByName
parameters:
- name: fqn
in: path
description: Name of the MCP Server
required: true
schema:
type: string
requestBody:
description: JsonPatch with array of operations
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/JsonPatch'
example: '[{op:remove, path:/a},{op:add, path: /b, value: val}]'
responses:
default:
description: default response
content:
application/json: {}
/v1/mcpServers/{id}:
get:
tags:
- MCP Servers
summary: Get an MCP server by Id
description: Get an MCP server by `Id`.
operationId: getMcpServerByID
parameters:
- name: id
in: path
description: Id of the MCP Server
required: true
schema:
type: string
format: uuid
- name: fields
in: query
description: Fields requested in the returned resource
schema:
type: string
example: owners,followers,tags,extension,domains,tools,resources,prompts,service
- name: include
in: query
description: Include all, deleted, or non-deleted entities.
schema:
type: string
default: non-deleted
enum:
- all
- deleted
- non-deleted
- name: includeRelations
in: query
description: 'Per-relation include control. Format: field:value,field2:value2. Example: owners:non-deleted,followers:all. Valid values: all, deleted, non-deleted. If not specified for a field, uses the entity''s include value.'
schema:
type: string
example: owners:non-deleted,followers:all
responses:
'200':
description: The MCP server
content:
application/json:
schema:
$ref: '#/components/schemas/McpServer'
'404':
description: MCP Server for instance {id} is not found
delete:
tags:
- MCP Servers
summary: Delete an MCP server by Id
description: Delete an MCP server by `Id`.
operationId: deleteMcpServer
parameters:
- name: hardDelete
in: query
description: Hard delete the entity. (Default = `false`)
schema:
type: boolean
default: false
- name: recursive
in: query
description: Recursively delete this entity and it's children. (Default `false`)
schema:
type: boolean
default: false
- name: id
in: path
description: Id of the MCP Server
required: true
schema:
type: string
format: uuid
responses:
'200':
description: OK
'404':
description: MCP Server for instance {id} is not found
patch:
tags:
- MCP Servers
summary: Update an MCP server
description: Update an existing MCP server using JsonPatch.
externalDocs:
description: JsonPatch RFC
url: https://tools.ietf.org/html/rfc6902
operationId: patchMcpServer
parameters:
- name: id
in: path
description: Id of the MCP Server
required: true
schema:
type: string
format: uuid
requestBody:
description: JsonPatch with array of operations
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/JsonPatch'
example: '[{op:remove, path:/a},{op:add, path: /b, value: val}]'
responses:
default:
description: default response
content:
application/json: {}
/v1/mcpServers/async/{id}:
delete:
tags:
- MCP Servers
summary: Asynchronously delete an MCP server by Id
description: Asynchronously delete an MCP server by `Id`.
operationId: deleteMcpServerAsync
parameters:
- name: hardDelete
in: query
description: Hard delete the entity. (Default = `false`)
schema:
type: boolean
default: false
- name: recursive
in: query
description: Recursively delete this entity and it's children. (Default `false`)
schema:
type: boolean
default: false
- name: id
in: path
description: Id of the MCP Server
required: true
schema:
type: string
format: uuid
responses:
'200':
description: OK
'404':
description: MCP Server for instance {id} is not found
/v1/mcpServers/{id}/followers/{userId}:
delete:
tags:
- MCP Servers
summary: Remove a follower
description: Remove the user identified `userId` as a follower of the MCP server.
operationId: deleteFollower_3
parameters:
- name: id
in: path
description: Id of the MCP Server
required: true
schema:
type: string
format: uuid
- name: userId
in: path
description: Id of the user being removed as follower
required: true
schema:
type: string
format: uuid
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ChangeEvent'
/v1/mcpServers/{id}/versions/{version}:
get:
tags:
- MCP Servers
summary: Get a version of the MCP server
description: Get a version of the MCP server by given `id`
operationId: getSpecificMcpServerVersion
parameters:
- name: id
in: path
description: Id of the MCP Server
required: true
schema:
type: string
format: uuid
- name: version
in: path
description: MCP Server version number in the form `major`.`minor`
required: true
schema:
type: string
example: 0.1 or 1.1
responses:
'200':
description: McpServer
content:
application/json:
schema:
$ref: '#/components/schemas/McpServer'
'404':
description: MCP Server for instance {id} and version {version} is not found
/v1/mcpServers/history:
get:
tags:
- MCP Servers
summary: List all entity versions within a time range
description: 'Get a paginated list of all entity versions within a given time range specified by `startTs` and `endTs` in milliseconds since epoch. '
operationId: listAllEntityVersionsByTimestamp_3
parameters:
- name: startTs
in: query
description: Start timestamp in milliseconds since epoch
required: true
schema:
type: integer
format: int64
- name: endTs
in: query
description: End timestamp in milliseconds since epoch
required: true
schema:
type: integer
format: int64
- name: limit
in: query
description: Limit the number of entity returned (1 to 1000000, default = 10)
schema:
maximum: 500
minimum: 1
type: integer
format: int32
default: 10
- name: before
in: query
description: Returns list of entity versions before this cursor
schema:
type: string
- name: after
in: query
description: Returns list of entity versions after this cursor
schema:
type: string
responses:
'200':
description: List of all versions
content:
application/json:
schema:
$ref: '#/components/schemas/ResultList'
/v1/mcpServers/{id}/versions:
get:
tags:
- MCP Servers
summary: List MCP server versions
description: Get a list of all the versions of an MCP Server identified by `id`
operationId: listAllMcpServerVersions
parameters:
- name: id
in: path
description: Id of the MCP Server
required: true
schema:
type: string
format: uuid
responses:
'200':
description: List of MCP Server versions
content:
application/json:
schema:
$ref: '#/components/schemas/EntityHistory'
/v1/mcpServers/restore:
put:
tags:
- MCP Servers
summary: Restore a soft deleted MCP server
description: Restore a soft deleted MCP server.
operationId: restoreMcpServer
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RestoreEntity'
responses:
'200':
description: Successfully restored the MCP Server
content:
application/json:
schema:
$ref: '#/components/schemas/McpServer'
components:
schemas:
TagLabelRecognizerMetadata:
required:
- recognizerId
- recognizerName
- score
type: object
properties:
recognizerId:
type: string
format: uuid
recognizerName:
type: string
score:
type: number
format: double
target:
type: string
enum:
- content
- column_name
patterns:
type: array
items:
$ref: '#/components/schemas/PatternMatch'
Annotations__1:
type: object
properties:
audience:
type: array
items:
type: string
priority:
type: number
format: double
McpResource:
required:
- name
- uri
type: object
properties:
name:
type: string
displayName:
type: string
description:
type: string
resourceType:
type: string
enum:
- File
- Directory
- URL
- Database
- API
- Blob
- Stream
- Document
- Custom
uri:
type: string
uriTemplate:
type: string
mimeType:
type: string
dataClassification:
$ref: '#/components/schemas/DataClassification__1'
accessLevel:
type: string
enum:
- ReadOnly
- ReadWrite
- Full
requiredPermissions:
type: array
items:
type: string
sourceEntity:
$ref: '#/components/schemas/EntityReference'
annotations:
$ref: '#/components/schemas/Annotations__1'
size:
type: integer
format: int32
lastModified:
type: integer
format: int64
accessCount:
type: integer
format: int32
tags:
type: array
items:
$ref: '#/components/schemas/TagLabel'
McpPromptArgument:
required:
- name
type: object
properties:
name:
type: string
type:
type: string
enum:
- String
- Number
- Boolean
- Array
- Object
description:
type: string
required:
type: boolean
default:
type: object
enum:
type: array
items:
type: object
sensitive:
type: boolean
McpServerCapabilities:
type: object
properties:
toolsSupported:
type: boolean
resourcesSupported:
type: boolean
promptsSupported:
type: boolean
loggingSupported:
type: boolean
samplingSupported:
type: boolean
rootsSupported:
type: boolean
AIComplianceRecord:
required:
- framework
- status
type: object
properties:
framework:
type: string
enum:
- EU_AI_Act
- Singapore_Model_AI_Governance
- Canada_AIDA
- US_AI_Bill_of_Rights
- NIST_AI_RMF
- ISO_IEC_42001
- UK_AI_Regulation
- China_AI_Regulations
- Custom
assessedBy:
type: string
assessedAt:
type: integer
format: int64
nextReviewDate:
type: integer
format: int64
status:
type: string
enum:
- Compliant
- PartiallyCompliant
- NonCompliant
- UnderReview
- NotApplicable
euAIAct:
$ref: '#/components/schemas/EUAIActCompliance'
ethicalAssessment:
$ref: '#/components/schemas/EthicalAIAssessment'
scopeAndDeployment:
$ref: '#/components/schemas/ScopeAndDeployment'
verification:
$ref: '#/components/schemas/Verification'
notes:
type: string
remediationRequired:
type: array
items:
type: string
McpServerInfo:
type: object
properties:
serverName:
type: string
serverVersion:
type: string
vendor:
type: string
repositoryUrl:
type: string
documentationUrl:
type: string
Example:
type: object
properties:
name:
type: string
arguments:
$ref: '#/components/schemas/Arguments'
expectedOutput:
type: string
AccessDetails:
required:
- timestamp
type: object
properties:
timestamp:
type: integer
format: int64
accessedBy:
$ref: '#/components/schemas/EntityReference'
accessedByAProcess:
type: string
ChangeSummaryMap:
type: object
FieldChange:
type: object
properties:
name:
type: string
oldValue:
type: object
newValue:
type: object
CoverImage:
type: object
properties:
url:
type: string
position:
type: string
AccountabilityMeasures:
type: object
properties:
hasOwner:
type: boolean
subjectToHumanOversight:
type: boolean
auditTrailEnabled:
type: boolean
RestoreEntity:
required:
- id
type: object
properties:
id:
type: string
format: uuid
RiskAssessment__1:
type: object
properties:
riskLevel:
type: string
enum:
- Low
- Medium
- High
- Critical
riskFactors:
type: array
items:
type: string
mitigations:
type: array
items:
type: string
assessedBy:
type: string
assessedAt:
type: integer
format: int64
HighRiskSystems:
type: object
properties:
criticalInfrastructure:
type: boolean
educationVocationalTraining:
type: boolean
employment:
type: boolean
essentialPrivateServices:
type: boolean
essentialPublicServices:
type: boolean
lawEnforcement:
type: boolean
migrationAsylumBorderControl:
type: boolean
administrationOfJustice:
type: boolean
LifeCycle:
type: object
properties:
created:
$ref: '#/components/schemas/AccessDetails'
updated:
$ref: '#/components/schemas/AccessDetails'
accessed:
$ref: '#/components/schemas/AccessDetails'
McpUsageMetrics:
type: object
properties:
totalInvocations:
type: integer
format: int32
successRate:
type: number
format: double
averageLatencyMs:
type: number
format: double
p95LatencyMs:
type: number
format: double
lastInvokedAt:
type: integer
format: int64
uniqueUsers:
type: integer
format: int32
dailyActiveUsers:
type: integer
format: int32
DataClassification__2:
type: object
properties:
accessesPII:
type: boolean
accessesSensitiveData:
type: boolean
dataCategories:
type: array
items:
type: string
dataRetentionPeriod:
type: string
McpConnectionConfig:
type: object
properties:
command:
type: string
args:
type: array
items:
type: string
env:
$ref: '#/components/schemas/Env'
workingDirectory:
type: string
url:
type: string
timeout:
type: integer
format: int32
retryAttempts:
type: integer
format: int32
EntityHistory:
required:
- entityType
- versions
type: object
properties:
entityType:
type: string
versions:
type: array
items:
type: object
AssetCertification:
required:
- appliedDate
- expiryDate
- tagLabel
type: object
properties:
tagLabel:
$ref: '#/components/schemas/TagLabel'
appliedDate:
type: integer
format: int64
expiryDate:
type: integer
format: int64
TransparencyObligations:
type: object
properties:
usersInformed:
type: boolean
deepfakeLabeling:
type: boolean
emotionRecognitionDisclosure:
type: boolean
ResultList:
required:
- data
type: object
properties:
data:
type: array
items:
type: object
paging:
$ref: '#/components/schemas/Paging'
errors:
type: array
items:
$ref: '#/components/schemas/EntityError'
warningsCount:
type: integer
format: int32
warnings:
type: array
items:
$ref: '#/components/schemas/EntityError'
Paging:
required:
- total
type: object
properties:
before:
type: string
after:
type: string
offset:
type: integer
format: int32
limit:
type: integer
format: int32
total:
type: integer
format: int32
Annotations:
type: object
properties:
title:
type: string
readOnlyHint:
type: boolean
destructiveHint:
type: boolean
idempotentHint:
type: boolean
openWorldHint:
type: boolean
ScopeAndDeployment:
type: object
properties:
scope:
type: string
enum:
- Internal
- External
- Both
deploymentRegions:
type: array
items:
type: string
affectedUserCount:
type: integer
format: int32
JsonPatch:
type: object
EthicalAIAssessment:
type: object
properties:
privacyLevel:
type: string
enum:
- Public
- Sensitive
- PersonalData
fairnessRisk:
type: string
enum:
- Low
- Medium
- High
biasMitigationCoverage:
type: string
enum:
- None
- Partial
- Full
reliabilitySafetyRisk:
type: string
enum:
- Low
- Moderate
- High
transparencyLevel:
type: string
enum:
- None
- Partial
- FullDisclosure
accountabilityMeasures:
$ref: '#/components/schemas/AccountabilityMeasures'
environmentalConsciousness:
type: string
enum:
- LowRisk
- MediumRisk
- HighRisk
CreateMcpServer:
required:
- name
- serverType
- service
type: object
properties:
name:
maxLength: 256
minLength: 1
pattern: ^((?!::).)*$
type: string
displayName:
type: string
description:
type: string
service:
maxLength: 3072
minLength: 1
type: string
serverType:
type: string
enum:
- DataAccess
- FileSystem
- WebAPI
- Database
- Cloud
- Security
- Development
- Communication
- Custom
transportType:
type: string
enum:
- Stdio
- SSE
- StreamableHTTP
protocolVersion:
type: string
developmentStage:
type: string
enum:
- Proposal
- Development
- Testing
- Staging
- Production
- Deprecated
- Unauthorized
serverInfo:
$ref: '#/components/schemas/McpServerInfo'
connectionConfig:
$ref: '#/components/schemas/McpConnectionConfig'
capabilities:
$ref: '#/components/schemas/McpServerCapabilities'
tools:
type: array
items:
$ref: '#/components/schemas/McpTool'
resources:
type: array
items:
$ref: '#/components/schemas/McpResource'
prompts:
type: array
items:
$ref: '#/components/schemas/McpPrompt'
governanceMetadata:
$ref: '#/components/schemas/McpGovernanceMetadata'
dataAccessSummary:
$ref: '#/components/schemas/McpDataAccessSummary'
securityMetrics:
$ref: '#/components/schemas/McpSecurityMetrics'
sourceCode:
type: string
deploymentUrl:
type: string
documentation:
type: string
tags:
type: array
items:
$ref: '#/components/schemas/TagLabel'
owners:
type: array
items:
$ref: '#/components/schemas/EntityReference'
extension:
type: object
domains:
type: array
items:
type: string
dataProducts:
type: array
items:
type: string
reviewers:
type: array
items:
$ref: '#/components/schemas/EntityReference'
lifeCycle:
$ref: '#/components/schemas/LifeCycle'
McpTool:
required:
- name
type: object
properties:
name:
type: string
displayName:
type: string
description:
type: string
toolCategory:
type: string
enum:
- FileOperation
- WebOperation
- DataOperation
- DatabaseOperation
- SystemOperation
- SecurityOperation
- CommunicationOperation
- CodeOperation
- SearchOperation
- Custom
inputSchema:
$ref: '#/components/schemas/InputSchema'
outputSchema:
$ref: '#/components/schemas/OutputSchema'
riskLevel:
type: string
enum:
- Low
- Medium
- High
- Critical
riskFactors:
type: array
items:
type: string
dataAccess:
$ref: '#/components/schemas/DataAccess__1'
requiredPermissions:
type: array
items:
type: string
sideEffects:
type: boolean
idempotent:
type: boolean
reversible:
type: boolean
timeout:
type: integer
format: int32
rateLimitPerMinute:
type: integer
format: int32
annotations:
$ref: '#/components/schemas/Annotations'
usageCount:
type: integer
format: int32
lastUsedAt:
type: integer
format: int64
tags:
type: array
items:
$ref: '#/components/schemas/TagLabel'
McpSecurityMetrics:
type: object
properties:
authenticationRequired:
type: boolean
authorizationEnforced:
type: boolean
auditLoggingEnabled:
type: boolean
encryptionInTransit:
type: boolean
sandboxed:
type: boolean
secretsManagement:
type: string
OutputSchema:
type: object
InputSchema:
type: object
Verification:
type: object
properties:
isVerified:
type: boolean
verifiedBy:
type: string
verifiedAt:
type: integer
format: int64
verificationNotes:
type: string
certificateUrl:
type: string
ConformityAssessment:
type: object
properties:
assessmentRequired:
# --- truncated at 32 KB (48 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/openmetadata/refs/heads/main/openapi/openmetadata-mcp-servers-api-openapi.yml