{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"TrueFoundry Docs","description":"TrueFoundry documentation — enterprise-grade AI Gateway combining LLM, MCP, and Agent Gateways to connect, monitor, and govern agentic AI applications across providers from a unified control plane.","colors":{"primary":"#4f46e5","light":"#4f46e5","dark":"#4f46e5"},"logo":{"light":"https://mintcdn.com/truefoundry/e2uUimEwX30qkWxc/logo/light.svg?fit=max\u0026auto=format\u0026n=e2uUimEwX30qkWxc\u0026q=85\u0026s=6068d83664aeda0239bec2422657dd20","dark":"https://mintcdn.com/truefoundry/e2uUimEwX30qkWxc/logo/dark.svg?fit=max\u0026auto=format\u0026n=e2uUimEwX30qkWxc\u0026q=85\u0026s=c1cb26554a546d84500b40f7057bece8"},"favicon":"https://mintcdn.com/truefoundry/6bbtTt95c1iCcyph/favicon.svg?fit=max\u0026auto=format\u0026n=6bbtTt95c1iCcyph\u0026q=85\u0026s=f55bde34214b38034126d05b08ea16c7","appearance":{"default":"light"},"background":{"decoration":"grid"},"navbar":{"links":[{"href":"https://www.truefoundry.com/book-demo","label":"Book Demo"},{"href":"https://www.truefoundry.com/blog","label":"Blog"}],"primary":{"type":"button","label":"Sign Up","href":"https://www.truefoundry.com/register"}},"footer":{"socials":{"x":"https://twitter.com/truefoundry","linkedin":"https://in.linkedin.com/company/truefoundry"}},"seo":{"metatags":{"og:type":"website","og:site_name":"TrueFoundry Docs","og:image":"https://assets.production.truefoundry.com/logo.svg","og:description":"TrueFoundry offers an enterprise-grade AI Gateway combining LLM, MCP, and Agent Gateways—empowering businesses to connect, monitor, and govern agentic AI applications across providers from a unified control plane.","description":"TrueFoundry offers an enterprise-grade AI Gateway combining LLM, MCP, and Agent Gateways—empowering businesses to connect, monitor, and govern agentic AI applications across providers from a unified control plane."}},"icons":{"library":"fontawesome"},"styling":{"codeblocks":"dark","latex":true},"contextual":{"options":["copy","view","chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"truefoundry","hasAudioNarration":false,"actualSubdomain":"truefoundry","customDomains":["www.truefoundry.com"],"gitSource":{"type":"github","owner":"truefoundry","repo":"docs-mintlify","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aec6dc2252b547dce080d65","collectionId":"7db789a6-79df-4843-975a-05373c794490","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aec6dc2252b547dce080d65"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6aede15d0b5cc06928d33419","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"AI Gateway","count":233},{"language":"default","tag":"API Reference","count":202},{"language":"default","tag":"Platform","count":198},{"language":"default","tag":"Integrations","count":132},{"language":"default","tag":"AI Deployment","count":108},{"language":"default","tag":"LLM Gateway","count":100},{"language":"default","tag":"Integrate Models","count":50},{"language":"default","tag":"Observability","count":47},{"language":"default","tag":"Guardrails and Security","count":46},{"language":"default","tag":"Installation Guides","count":44}]},"assistantConfig":{"enableAskAiButton":true,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@truefoundry.com","showHelpButton":true}},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".line-highlight{background:rgb(var(--primary-light)/.7)!important}.tfy-cat-anchor{scroll-margin-top:6rem;margin-block:1.75rem}.line-highlight:before{background:rgb(var(--primary-light)/.7)!important}.line-highlight:after{background:rgb(var(--primary-light)/.7)!important}"}],"page":{"pagePath":"docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server","slug":"/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server","pageMetadata":{"title":"Create or update an MCP server","description":"Creates a new MCP server (when no server with `manifest.name` exists in the tenant) or updates the existing one.","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/mcp","href":"/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Creates a new MCP server (when no server with \", _jsx(_components.code, {\n children: \"manifest.name\"\n }), \" exists in the tenant) or updates the existing one.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Create or update an MCP server","description":"Creates a new MCP server (when no server with `manifest.name` exists in the tenant) or updates the existing one.","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/mcp","href":"/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/truefoundry/9e0085f7ed271180/scripts.js"],"openApiReferenceData":{"operation":{"description":"Creates a new MCP server (when no server with `manifest.name` exists in the tenant) or updates the existing one.","operationId":"MCPServerV2.createOrUpdateMCPServer","parameters":[],"requestBody":"89f8119c-63c0-4fae-900c-5d8e7df7fc76","responses":{"200":"0560f608-ae8d-468d-a155-4ad138af0519","400":"ae9e925f-4da2-4283-a2bd-0f5e167dcd47"},"security":["d7db0aee-9032-40c4-9f49-e7318829e2d1"],"summary":"Create or update an MCP server","tags":["MCP Servers V2","public"],"x-fern-sdk-group-name":["mcp_servers"],"x-fern-sdk-method-name":"createOrUpdate","method":"put","type":"path","servers":["420b2084-a24a-46fb-8cda-d10944e1e5a2"],"path":"/api/svc/v1/mcp","baseUrlOptions":["https://{controlPlaneURL}"],"title":"Create or update an MCP server","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"manifest":{"oneOf":[{"type":"object","title":"RemoteMCPServerManifest","description":"The MCP server manifest describing the server type, name, auth configuration, and other settings.","required":["type","name","description","url"],"x-fern-type-name":"MCPServerManifest","properties":{"type":{"description":"+value=mcp-server/remote","type":"string","enum":["mcp-server/remote"],"default":"mcp-server/remote","isRequired":true,"uniqueKey":"manifest.oneOf.0.type","typeLabel":"enum\u003cstring>"},"name":{"description":"The name of the MCP Server.","type":"string","pattern":"^[a-z][a-z0-9\\-]{1,71}[a-z0-9]$","isRequired":true,"uniqueKey":"manifest.oneOf.0.name","typeLabel":"string"},"description":{"description":"Provide a brief description of the purpose of this MCP Server.","type":"string","minLength":1,"maxLength":1000,"isRequired":true,"uniqueKey":"manifest.oneOf.0.description","typeLabel":"string"},"url":{"description":"The endpoint URL for the MCP Server.","type":"string","pattern":"^https?:\\/\\/[^\\s]+$","isRequired":true,"uniqueKey":"manifest.oneOf.0.url","typeLabel":"string"},"display_name":{"description":"A human-readable label for the MCP Server in the UI. If omitted, the server name is shown.","type":"string","minLength":1,"maxLength":128,"uniqueKey":"manifest.oneOf.0.display_name","typeLabel":"string"},"tls_settings":{"description":"Configure TLS settings for secure connections with custom CA certificates.","type":"object","required":["reject_unauthorized"],"properties":{"reject_unauthorized":{"description":"When set to true, it will reject any connection which is not authorized with the list of supplied CAs.","type":"boolean","default":true,"isRequired":true,"uniqueKey":"manifest.oneOf.0.tls_settings.reject_unauthorized","typeLabel":"boolean"},"ca_cert":{"description":"Add custom CA certificates to use for TLS verification.","type":"string","uniqueKey":"manifest.oneOf.0.tls_settings.ca_cert","typeLabel":"string"}},"title":"CustomTLSSettings","x-fern-type-name":"CustomTLSSettings","uniqueKey":"manifest.oneOf.0.tls_settings","typeLabel":"CustomTLSSettings · object"},"tool_settings":{"description":"Customize tool descriptions or enable/disable specific tools from the MCP Server.","type":"array","items":{"description":"MCP Tool Setting","type":"object","required":["name"],"properties":{"name":{"description":"The unique name of the tool.","type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","isRequired":true,"uniqueKey":"manifest.oneOf.0.tool_settings.items.[INDEX].name","typeLabel":"string"},"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"uniqueKey":"manifest.oneOf.0.tool_settings.items.[INDEX].description","typeLabel":"string"},"disabled":{"description":"Allows to disable the tool.","type":"boolean","uniqueKey":"manifest.oneOf.0.tool_settings.items.[INDEX].disabled","typeLabel":"boolean"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"manifest.oneOf.0.tool_settings.items.[INDEX].annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"manifest.oneOf.0.tool_settings.items.[INDEX].annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"manifest.oneOf.0.tool_settings.items.[INDEX].annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"MCPToolSetting","x-fern-type-name":"MCPToolSetting","uniqueKey":"manifest.oneOf.0.tool_settings.items.[INDEX]","typeLabel":"MCPToolSetting · object"},"uniqueKey":"manifest.oneOf.0.tool_settings","typeLabel":"MCPToolSetting · object[]"},"tool_policy":{"description":"Enable/disable policy for MCP tools.","type":"object","required":["enable_tools_by_default"],"properties":{"enable_tools_by_default":{"description":"When true, all tools are exposed except those in disabled_tools. When false, only tools listed in enabled_tools are exposed.","type":"boolean","enum":[true,false],"default":true,"isRequired":true,"uniqueKey":"manifest.oneOf.0.tool_policy.enable_tools_by_default","typeLabel":"enum\u003cboolean>"},"disabled_tools":{"description":"Tool names to disable when enable_tools_by_default is true.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","uniqueKey":"manifest.oneOf.0.tool_policy.disabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"manifest.oneOf.0.tool_policy.disabled_tools","typeLabel":"string[]"},"enabled_tools":{"description":"Tool names to enable when enable_tools_by_default is false.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","uniqueKey":"manifest.oneOf.0.tool_policy.enabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"manifest.oneOf.0.tool_policy.enabled_tools","typeLabel":"string[]"}},"title":"MCPToolPolicy","x-fern-type-name":"MCPToolPolicy","uniqueKey":"manifest.oneOf.0.tool_policy","typeLabel":"MCPToolPolicy · object"},"tool_metadata":{"description":"Per-tool description and annotation overrides keyed by tool name.","type":"object","additionalProperties":{"description":"Description and annotation overrides for a single MCP tool.","type":"object","properties":{"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"uniqueKey":"manifest.oneOf.0.tool_metadata.additionalProperties.description","typeLabel":"string"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"manifest.oneOf.0.tool_metadata.additionalProperties.annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"manifest.oneOf.0.tool_metadata.additionalProperties.annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"manifest.oneOf.0.tool_metadata.additionalProperties.annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"MCPToolMetadata","x-fern-type-name":"MCPToolMetadata","uniqueKey":"manifest.oneOf.0.tool_metadata.additionalProperties","typeLabel":"MCPToolMetadata · object"},"uniqueKey":"manifest.oneOf.0.tool_metadata","typeLabel":"object"},"auth_data":{"oneOf":[{"type":"object","title":"MCPServerHeaderAuth","description":"Authenticate using a static key or token sent as a request header. Choose shared vs individual credentials below.","required":["type","headers","auth_level"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"+value=header","type":"string","enum":["header"],"default":"header","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.0.type","typeLabel":"enum\u003cstring>"},"headers":{"description":"Map each header name to its value. For shared, enter the actual value. For individual, use a placeholder that will be filled in by each user (e.g. Bearer {{API_KEY}}).","type":"object","additionalProperties":{"type":"string","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.0.headers.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.0.headers","typeLabel":"object"},"auth_level":{"description":"Level at which this authentication will be applied. Values: global (default), per_user","type":"string","enum":["global","per_user"],"default":"global","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.0.auth_level","typeLabel":"enum\u003cstring>"}},"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.0","typeLabel":"MCPServerHeaderAuth · object"},{"type":"object","title":"MCPServerOAuth2","description":"OAuth2","required":["type","grant_type","provider"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"OAuth2 authentication","type":"string","enum":["oauth2"],"default":"oauth2","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.type","typeLabel":"enum\u003cstring>"},"grant_type":{"description":"The OAuth2 grant type to use for authentication.","type":"string","enum":["authorization_code","client_credentials","token_exchange","id_jag","jwt_bearer"],"default":"authorization_code","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.grant_type","typeLabel":"enum\u003cstring>"},"provider":{"description":"Select the OAuth provider. Provider-specific configuration (e.g. Auth0 organization) is unlocked based on this value.","type":"string","enum":["custom","auth0","okta","microsoft-entra"],"default":"custom","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"use_organization":{"description":"When enabled, organization will be extracted from the inbound token and it will be included as the organization parameter on token endpoint requests.","type":"boolean","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.use_organization","typeLabel":"boolean"},"default_organization":{"description":"Fallback Auth0 organization when the inbound token does not include organization.","type":"string","pattern":"^\\S+$","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.default_organization","typeLabel":"string"},"audience":{"description":"Okta target audience (RFC 8693 'audience'). Required when the token_exchange grant type is used with the okta provider.","type":"string","pattern":"^\\S+$","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.audience","typeLabel":"string"},"issuer_uri":{"description":"Issuer URI of the authorization server the ID-JAG token is issued for. Sent as the 'audience' parameter on the ID-JAG token exchange.","type":"string","pattern":"^\\S+$","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.issuer_uri","typeLabel":"string"},"authorization_url":{"description":"URL for the authorization request","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.authorization_url","typeLabel":"string"},"token_url":{"description":"The endpoint to exchange auth code for tokens.","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.token_url","typeLabel":"string"},"client_id":{"description":"client ID for OAuth2 or the TrueFoundry secret FQN containing the client ID.","type":"string","pattern":"^\\S+$","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.client_id","typeLabel":"string"},"client_authentication":{"description":"How the OAuth client authenticates to the token endpoint. Certificate auth is available for Microsoft Entra client_credentials and jwt_bearer (on-behalf-of).","type":"string","enum":["client_secret","certificate"],"default":"client_secret","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.client_authentication","typeLabel":"enum\u003cstring>"},"client_secret":{"description":"Client secret or the TrueFoundry secret FQN containing the client secret for OAuth2.","type":"string","minLength":1,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.client_secret","typeLabel":"string"},"certificate_thumbprint":{"description":"Hex SHA-1 thumbprint from the Azure portal, or the TrueFoundry secret FQN containing it.","type":"string","pattern":"^\\S+$","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.certificate_thumbprint","typeLabel":"string"},"private_key":{"description":"PEM private key for Microsoft Entra certificate-based client authentication, or the TrueFoundry secret FQN containing it.","type":"string","minLength":1,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.private_key","typeLabel":"string"},"registration_url":{"description":"URL for dynamic client registration (RFC 7591). If provided, client credentials will be obtained automatically using the Dynamic Client Registration (DCR) process.","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.registration_url","typeLabel":"string"},"introspection_url":{"description":"URL to fetch token expiry (RFC 7662) when the provider does not return expires_in (e.g. Salesforce). Requires client_id and client_secret.","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.introspection_url","typeLabel":"string"},"include_resource":{"description":"When enabled, the MCP server URL is sent as the resource parameter (RFC 8707) on both authorization and token endpoint requests.","type":"boolean","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.include_resource","typeLabel":"boolean"},"code_challenge_methods_supported":{"description":"List of supported PKCE code challenge methods (S256 only)","type":"array","items":{"type":"string","enum":["S256"],"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.code_challenge_methods_supported.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.code_challenge_methods_supported","typeLabel":"enum\u003cstring>[]"},"jwt_source":{"description":"Source of the JWT token to be used for verification.","type":"string","enum":["access_token","id_token"],"default":"access_token","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.jwt_source","typeLabel":"enum\u003cstring>"},"scopes":{"description":"List of scopes to request from the OAuth2 provider.","type":"array","items":{"type":"string","minLength":1,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.scopes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.scopes","typeLabel":"string[]"},"additional_token_params":{"description":"Extra key/value pairs sent on every token endpoint request (e.g. Auth0 'organization').","type":"object","additionalProperties":{"type":"string","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.additional_token_params.additionalProperties","typeLabel":"string"},"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1.additional_token_params","typeLabel":"object"}},"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.1","typeLabel":"MCPServerOAuth2 · object"},{"type":"object","title":"MCPServerPassthrough","description":"Authenticate using your existing TrueFoundry account (PAT or Virtual Accounts). Your credentials are automatically passed to the MCP server.","required":["type"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"+value=passthrough","type":"string","enum":["passthrough"],"default":"passthrough","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.2.type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.2","typeLabel":"MCPServerPassthrough · object"},{"type":"object","title":"MCPServerAwsSigV4Auth","description":"Sign requests to AWS Bedrock AgentCore with AWS credentials (SigV4).","required":["type","region","auth"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"+value=aws-sigv4","type":"string","enum":["aws-sigv4"],"default":"aws-sigv4","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.3.type","typeLabel":"enum\u003cstring>"},"region":{"type":"string","enum":["af-south-1","ap-east-1","ap-northeast-1","ap-northeast-2","ap-northeast-3","ap-south-1","ap-south-2","ap-southeast-1","ap-southeast-2","ap-southeast-3","ap-southeast-4","ap-southeast-5","ap-southeast-7","ca-central-1","ca-west-1","cn-north-1","cn-northwest-1","eu-central-1","eu-central-2","eu-north-1","eu-south-1","eu-south-2","eu-west-1","eu-west-2","eu-west-3","il-central-1","me-central-1","me-south-1","mx-central-1","sa-east-1","us-east-1","us-east-2","us-gov-east-1","us-gov-west-1","us-west-1","us-west-2","ap-southeast-6","ap-east-2"],"title":"AWSRegion","x-fern-type-name":"AWSRegion","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.3.region","typeLabel":"enum\u003cstring>"},"auth":{"oneOf":[{"type":"object","title":"MCPServerAwsAccessKeyAuth","description":"Authenticate with an AWS access key pair.","required":["type","access_key_id","secret_access_key"],"x-fern-type-name":"MCPServerAwsAccessKeyAuth","properties":{"type":{"description":"+value=aws-access-key","type":"string","enum":["aws-access-key"],"default":"aws-access-key","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.0.type","typeLabel":"enum\u003cstring>"},"access_key_id":{"description":"AWS access key ID. Prefer a tfy-secret reference.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.0.access_key_id","typeLabel":"string"},"secret_access_key":{"description":"AWS secret access key. Prefer a tfy-secret reference.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.0.secret_access_key","typeLabel":"string"}},"isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.0","typeLabel":"MCPServerAwsAccessKeyAuth · object"},{"type":"object","title":"MCPServerAwsAssumeRoleAuth","description":"Authenticate by assuming an IAM role (SigV4).","required":["type","assumed_role_arn"],"x-fern-type-name":"MCPServerAwsAssumeRoleAuth","properties":{"type":{"description":"+value=aws-assumed-role","type":"string","enum":["aws-assumed-role"],"default":"aws-assumed-role","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.1.type","typeLabel":"enum\u003cstring>"},"assumed_role_arn":{"description":"ARN of the role you want to assume. Prefer a tfy-secret reference.","type":"string","pattern":"^(arn:(aws|aws-us-gov|aws-cn):iam::[0-9]{12}:role(/[\\w+=,.@-]+)+|tfy-secret:\\/\\/.+:.+:.+)$","isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.1.assumed_role_arn","typeLabel":"string"},"external_id":{"description":"Optional external ID to use when assuming the role. This provides an added layer of security by ensuring only parties with the correct external ID can assume the role.","type":"string","uniqueKey":"manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.1.external_id","typeLabel":"string"}},"isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.1","typeLabel":"MCPServerAwsAssumeRoleAuth · object"}],"isRequired":true,"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.3.auth","typeLabel":"MCPServerAwsAccessKeyAuth · object | MCPServerAwsAssumeRoleAuth · object"}},"uniqueKey":"manifest.oneOf.0.auth_data.oneOf.3","typeLabel":"MCPServerAwsSigV4Auth · object"}],"uniqueKey":"manifest.oneOf.0.auth_data","typeLabel":"MCPServerHeaderAuth · object | MCPServerOAuth2 · object | MCPServerPassthrough · object | MCPServerAwsSigV4Auth · object"},"collaborators":{"description":"Users and Teams that have access to this MCP Server","type":"array","items":{"type":"object","required":["subject","role_id"],"properties":{"subject":{"description":"Fully Qualified Name of the subject. eg: user:email or team:teamname","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.0.collaborators.items.[INDEX].subject","typeLabel":"string"},"role_id":{"description":"Role ID for the resource","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.0.collaborators.items.[INDEX].role_id","typeLabel":"string"}},"title":"Collaborator","x-fern-type-name":"Collaborator","uniqueKey":"manifest.oneOf.0.collaborators.items.[INDEX]","typeLabel":"Collaborator · object"},"uniqueKey":"manifest.oneOf.0.collaborators","typeLabel":"Collaborator · object[]"},"ownedBy":{"description":"Names of the owners that own this resource","type":"object","required":["account"],"properties":{"account":{"description":"The name of the account that owns this resource","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.0.ownedBy.account","typeLabel":"string"}},"title":"OwnedBy","x-fern-type-name":"OwnedBy","uniqueKey":"manifest.oneOf.0.ownedBy","typeLabel":"OwnedBy · object"},"additional_headers":{"description":"Additional HTTP headers sent on each request to the MCP server. If the same header is set in both `additional_headers` and `auth_data`, the `auth_data` value wins.","type":"object","uniqueKey":"manifest.oneOf.0.additional_headers","typeLabel":"object"},"forwarded_headers":{"description":"Extra header names copied from the client request to the upstream MCP server. Content-Type, Accept, Last-Event-ID, and every header starting with mcp- (Mcp-Session-Id, Mcp-Protocol-Version, Mcp-Param-*) are already forwarded automatically.","type":"array","items":{"type":"string","pattern":"^[!#$%\u0026'+\\-.^_`|~0-9A-Za-z]+$","uniqueKey":"manifest.oneOf.0.forwarded_headers.items.[INDEX]","typeLabel":"string"},"uniqueKey":"manifest.oneOf.0.forwarded_headers","typeLabel":"string[]"},"tags":{"description":"Key-value pairs to categorize this MCP Server (e.g., by owner or environment).","type":"object","uniqueKey":"manifest.oneOf.0.tags","typeLabel":"object"}},"isRequired":true,"uniqueKey":"manifest.oneOf.0","typeLabel":"RemoteMCPServerManifest · object"},{"type":"object","title":"VirtualMCPServerManifest","description":"The MCP server manifest describing the server type, name, auth configuration, and other settings.","required":["type","name","description","servers"],"x-fern-type-name":"MCPServerManifest","properties":{"type":{"description":"+value=mcp-server/virtual","type":"string","enum":["mcp-server/virtual"],"default":"mcp-server/virtual","isRequired":true,"uniqueKey":"manifest.oneOf.1.type","typeLabel":"enum\u003cstring>"},"name":{"description":"The name of the Virtual MCP Server.","type":"string","pattern":"^[a-z][a-z0-9\\-]{1,71}[a-z0-9]$","isRequired":true,"uniqueKey":"manifest.oneOf.1.name","typeLabel":"string"},"description":{"description":"Provide a brief description of the purpose of this Virtual MCP Server.","type":"string","minLength":1,"maxLength":1000,"isRequired":true,"uniqueKey":"manifest.oneOf.1.description","typeLabel":"string"},"servers":{"description":"List of source MCP servers to include in this virtual server.","type":"array","items":{"description":"MCP Server Source","type":"object","required":["name"],"properties":{"name":{"description":"Name of the MCP server","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.1.servers.items.[INDEX].name","typeLabel":"string"},"enabled_tools":{"description":"List of tools to enable from this source server.","type":"array","items":{"type":"string","uniqueKey":"manifest.oneOf.1.servers.items.[INDEX].enabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"manifest.oneOf.1.servers.items.[INDEX].enabled_tools","typeLabel":"string[]"},"tool_slug":{"description":"Suffix appended to this server's tool names. Defaults to an auto-generated suffix.","type":"string","pattern":"^[a-z0-9]([a-z0-9-]{0,14}[a-z0-9])?$","uniqueKey":"manifest.oneOf.1.servers.items.[INDEX].tool_slug","typeLabel":"string"}},"title":"McpServerSource","x-fern-type-name":"McpServerSource","uniqueKey":"manifest.oneOf.1.servers.items.[INDEX]","typeLabel":"McpServerSource · object"},"isRequired":true,"uniqueKey":"manifest.oneOf.1.servers","typeLabel":"McpServerSource · object[]"},"display_name":{"description":"A human-readable label for the Virtual MCP Server in the UI. If omitted, the server name is shown.","type":"string","minLength":1,"maxLength":128,"uniqueKey":"manifest.oneOf.1.display_name","typeLabel":"string"},"best_effort_mode":{"description":"When enabled, the virtual MCP server continues with available source servers even if some servers fail.","type":"boolean","default":false,"uniqueKey":"manifest.oneOf.1.best_effort_mode","typeLabel":"boolean"},"collaborators":{"description":"Users and Teams that have access to this Virtual MCP Server","type":"array","items":{"type":"object","required":["subject","role_id"],"properties":{"subject":{"description":"Fully Qualified Name of the subject. eg: user:email or team:teamname","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.1.collaborators.items.[INDEX].subject","typeLabel":"string"},"role_id":{"description":"Role ID for the resource","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.1.collaborators.items.[INDEX].role_id","typeLabel":"string"}},"title":"Collaborator","x-fern-type-name":"Collaborator","uniqueKey":"manifest.oneOf.1.collaborators.items.[INDEX]","typeLabel":"Collaborator · object"},"uniqueKey":"manifest.oneOf.1.collaborators","typeLabel":"Collaborator · object[]"},"ownedBy":{"description":"Names of the owners that own this resource","type":"object","required":["account"],"properties":{"account":{"description":"The name of the account that owns this resource","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.1.ownedBy.account","typeLabel":"string"}},"title":"OwnedBy","x-fern-type-name":"OwnedBy","uniqueKey":"manifest.oneOf.1.ownedBy","typeLabel":"OwnedBy · object"},"tags":{"description":"Key-value pairs to categorize this Virtual MCP Server (e.g., by owner or environment).","type":"object","uniqueKey":"manifest.oneOf.1.tags","typeLabel":"object"}},"isRequired":true,"uniqueKey":"manifest.oneOf.1","typeLabel":"VirtualMCPServerManifest · object"},{"type":"object","title":"OpenAPIMCPServerManifest","description":"The MCP server manifest describing the server type, name, auth configuration, and other settings.","required":["type","name","description","url","openapi_spec_source"],"x-fern-type-name":"MCPServerManifest","properties":{"type":{"description":"+value=mcp-server/openapi","type":"string","enum":["mcp-server/openapi"],"default":"mcp-server/openapi","isRequired":true,"uniqueKey":"manifest.oneOf.2.type","typeLabel":"enum\u003cstring>"},"name":{"description":"The name of the OpenAPI MCP Server.","type":"string","pattern":"^[a-z][a-z0-9\\-]{1,71}[a-z0-9]$","isRequired":true,"uniqueKey":"manifest.oneOf.2.name","typeLabel":"string"},"description":{"description":"Provide a brief description of the purpose of this OpenAPI MCP Server.","type":"string","minLength":1,"maxLength":1000,"isRequired":true,"uniqueKey":"manifest.oneOf.2.description","typeLabel":"string"},"url":{"description":"The base URL where API requests will be sent. This should be the root endpoint of your API server, without any path suffix.","type":"string","pattern":"^https?:\\/\\/[^\\s]+$","isRequired":true,"uniqueKey":"manifest.oneOf.2.url","typeLabel":"string"},"openapi_spec_source":{"oneOf":[{"type":"object","title":"RemoteSpecSource","description":"Fetch the OpenAPI specification from a remote HTTP/HTTPS endpoint.","required":["type","url"],"x-fern-type-name":"OpenAPISpecSource","properties":{"type":{"description":"+value=remote","type":"string","enum":["remote"],"default":"remote","isRequired":true,"uniqueKey":"manifest.oneOf.2.openapi_spec_source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"url":{"description":"URL to fetch the OpenAPI specification (JSON or YAML format).","type":"string","pattern":"^https?:\\/\\/[^\\s]+$","isRequired":true,"uniqueKey":"manifest.oneOf.2.openapi_spec_source.oneOf.0.url","typeLabel":"string"}},"isRequired":true,"uniqueKey":"manifest.oneOf.2.openapi_spec_source.oneOf.0","typeLabel":"RemoteSpecSource · object"},{"type":"object","title":"UploadSpecSource","description":"Fetch the stored/uploaded OpenAPI specification.","required":["type","url"],"x-fern-type-name":"OpenAPISpecSource","properties":{"type":{"description":"+value=upload","type":"string","enum":["upload"],"default":"upload","isRequired":true,"uniqueKey":"manifest.oneOf.2.openapi_spec_source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"url":{"description":"Cloud storage path where the OpenAPI specification is stored (S3, GCS, or Azure Blob).","type":"string","pattern":"^(s3://[^/]+|gs://[^/]+|https://[^.]+\\.blob\\.core\\.windows\\.net/[^/]+)/tfy-openapi-specs/(?:\\d{4}-\\d{2}/|[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+/)[a-f0-9-]+\\.json$","isRequired":true,"uniqueKey":"manifest.oneOf.2.openapi_spec_source.oneOf.1.url","typeLabel":"string"}},"isRequired":true,"uniqueKey":"manifest.oneOf.2.openapi_spec_source.oneOf.1","typeLabel":"UploadSpecSource · object"},{"type":"object","title":"InlineSpecSource","description":"Inline your OpenAPI specification directly. The spec will be stored securely.","required":["type","openapi_spec"],"x-fern-type-name":"OpenAPISpecSource","properties":{"type":{"description":"+value=inline","type":"string","enum":["inline"],"default":"inline","isRequired":true,"uniqueKey":"manifest.oneOf.2.openapi_spec_source.oneOf.2.type","typeLabel":"enum\u003cstring>"},"openapi_spec":{"oneOf":[{"type":"object","description":"The OpenAPI specification as a JSON object or a JSON/YAML string.","isRequired":true,"uniqueKey":"manifest.oneOf.2.openapi_spec_source.oneOf.2.openapi_spec.oneOf.0","typeLabel":"object"},{"type":"string","description":"The OpenAPI specification as a JSON object or a JSON/YAML string.","isRequired":true,"uniqueKey":"manifest.oneOf.2.openapi_spec_source.oneOf.2.openapi_spec.oneOf.1","typeLabel":"string"}],"isRequired":true,"uniqueKey":"manifest.oneOf.2.openapi_spec_source.oneOf.2.openapi_spec","typeLabel":"object | string"}},"isRequired":true,"uniqueKey":"manifest.oneOf.2.openapi_spec_source.oneOf.2","typeLabel":"InlineSpecSource · object"}],"isRequired":true,"uniqueKey":"manifest.oneOf.2.openapi_spec_source","typeLabel":"RemoteSpecSource · object | UploadSpecSource · object | InlineSpecSource · object"},"display_name":{"description":"A human-readable label for the OpenAPI MCP Server in the UI. If omitted, the server name is shown.","type":"string","minLength":1,"maxLength":128,"uniqueKey":"manifest.oneOf.2.display_name","typeLabel":"string"},"tls_settings":{"description":"Configure TLS settings for secure connections with custom CA certificates.","type":"object","required":["reject_unauthorized"],"properties":{"reject_unauthorized":{"description":"When set to true, it will reject any connection which is not authorized with the list of supplied CAs.","type":"boolean","default":true,"isRequired":true,"uniqueKey":"manifest.oneOf.2.tls_settings.reject_unauthorized","typeLabel":"boolean"},"ca_cert":{"description":"Add custom CA certificates to use for TLS verification.","type":"string","uniqueKey":"manifest.oneOf.2.tls_settings.ca_cert","typeLabel":"string"}},"title":"CustomTLSSettings","x-fern-type-name":"CustomTLSSettings","uniqueKey":"manifest.oneOf.2.tls_settings","typeLabel":"CustomTLSSettings · object"},"enable_all_tools":{"description":"When enabled, all tools from the OpenAPI spec will be available (up to 30 tools). Disable to select specific tools.","type":"boolean","uniqueKey":"manifest.oneOf.2.enable_all_tools","typeLabel":"boolean"},"tool_settings":{"description":"The tools to customize from the OpenAPI Server.","type":"array","items":{"description":"OpenAPI MCP Tool Setting","type":"object","required":["method","path","name","description"],"properties":{"method":{"description":"The HTTP method for this endpoint.","type":"string","enum":["get","post","put","patch","delete","head"],"isRequired":true,"uniqueKey":"manifest.oneOf.2.tool_settings.items.[INDEX].method","typeLabel":"enum\u003cstring>"},"path":{"description":"The API endpoint path (e.g., /users/{id}).","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.2.tool_settings.items.[INDEX].path","typeLabel":"string"},"name":{"description":"The unique name of this tool, derived from OpenAPI operationId.","type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","isRequired":true,"uniqueKey":"manifest.oneOf.2.tool_settings.items.[INDEX].name","typeLabel":"string"},"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"isRequired":true,"uniqueKey":"manifest.oneOf.2.tool_settings.items.[INDEX].description","typeLabel":"string"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"manifest.oneOf.2.tool_settings.items.[INDEX].annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"manifest.oneOf.2.tool_settings.items.[INDEX].annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"manifest.oneOf.2.tool_settings.items.[INDEX].annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"OpenAPIMCPToolSetting","x-fern-type-name":"OpenAPIMCPToolSetting","uniqueKey":"manifest.oneOf.2.tool_settings.items.[INDEX]","typeLabel":"OpenAPIMCPToolSetting · object"},"uniqueKey":"manifest.oneOf.2.tool_settings","typeLabel":"OpenAPIMCPToolSetting · object[]"},"auth_data":{"oneOf":[{"type":"object","title":"MCPServerHeaderAuth","description":"Authenticate using a static key or token sent as a request header. Choose shared vs individual credentials below.","required":["type","headers","auth_level"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"+value=header","type":"string","enum":["header"],"default":"header","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.0.type","typeLabel":"enum\u003cstring>"},"headers":{"description":"Map each header name to its value. For shared, enter the actual value. For individual, use a placeholder that will be filled in by each user (e.g. Bearer {{API_KEY}}).","type":"object","additionalProperties":{"type":"string","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.0.headers.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.0.headers","typeLabel":"object"},"auth_level":{"description":"Level at which this authentication will be applied. Values: global (default), per_user","type":"string","enum":["global","per_user"],"default":"global","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.0.auth_level","typeLabel":"enum\u003cstring>"}},"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.0","typeLabel":"MCPServerHeaderAuth · object"},{"type":"object","title":"MCPServerOAuth2","description":"OAuth2","required":["type","grant_type","provider"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"OAuth2 authentication","type":"string","enum":["oauth2"],"default":"oauth2","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.type","typeLabel":"enum\u003cstring>"},"grant_type":{"description":"The OAuth2 grant type to use for authentication.","type":"string","enum":["authorization_code","client_credentials","token_exchange","id_jag","jwt_bearer"],"default":"authorization_code","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.grant_type","typeLabel":"enum\u003cstring>"},"provider":{"description":"Select the OAuth provider. Provider-specific configuration (e.g. Auth0 organization) is unlocked based on this value.","type":"string","enum":["custom","auth0","okta","microsoft-entra"],"default":"custom","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"use_organization":{"description":"When enabled, organization will be extracted from the inbound token and it will be included as the organization parameter on token endpoint requests.","type":"boolean","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.use_organization","typeLabel":"boolean"},"default_organization":{"description":"Fallback Auth0 organization when the inbound token does not include organization.","type":"string","pattern":"^\\S+$","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.default_organization","typeLabel":"string"},"audience":{"description":"Okta target audience (RFC 8693 'audience'). Required when the token_exchange grant type is used with the okta provider.","type":"string","pattern":"^\\S+$","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.audience","typeLabel":"string"},"issuer_uri":{"description":"Issuer URI of the authorization server the ID-JAG token is issued for. Sent as the 'audience' parameter on the ID-JAG token exchange.","type":"string","pattern":"^\\S+$","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.issuer_uri","typeLabel":"string"},"authorization_url":{"description":"URL for the authorization request","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.authorization_url","typeLabel":"string"},"token_url":{"description":"The endpoint to exchange auth code for tokens.","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.token_url","typeLabel":"string"},"client_id":{"description":"client ID for OAuth2 or the TrueFoundry secret FQN containing the client ID.","type":"string","pattern":"^\\S+$","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.client_id","typeLabel":"string"},"client_authentication":{"description":"How the OAuth client authenticates to the token endpoint. Certificate auth is available for Microsoft Entra client_credentials and jwt_bearer (on-behalf-of).","type":"string","enum":["client_secret","certificate"],"default":"client_secret","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.client_authentication","typeLabel":"enum\u003cstring>"},"client_secret":{"description":"Client secret or the TrueFoundry secret FQN containing the client secret for OAuth2.","type":"string","minLength":1,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.client_secret","typeLabel":"string"},"certificate_thumbprint":{"description":"Hex SHA-1 thumbprint from the Azure portal, or the TrueFoundry secret FQN containing it.","type":"string","pattern":"^\\S+$","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.certificate_thumbprint","typeLabel":"string"},"private_key":{"description":"PEM private key for Microsoft Entra certificate-based client authentication, or the TrueFoundry secret FQN containing it.","type":"string","minLength":1,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.private_key","typeLabel":"string"},"registration_url":{"description":"URL for dynamic client registration (RFC 7591). If provided, client credentials will be obtained automatically using the Dynamic Client Registration (DCR) process.","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.registration_url","typeLabel":"string"},"introspection_url":{"description":"URL to fetch token expiry (RFC 7662) when the provider does not return expires_in (e.g. Salesforce). Requires client_id and client_secret.","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.introspection_url","typeLabel":"string"},"include_resource":{"description":"When enabled, the MCP server URL is sent as the resource parameter (RFC 8707) on both authorization and token endpoint requests.","type":"boolean","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.include_resource","typeLabel":"boolean"},"code_challenge_methods_supported":{"description":"List of supported PKCE code challenge methods (S256 only)","type":"array","items":{"type":"string","enum":["S256"],"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.code_challenge_methods_supported.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.code_challenge_methods_supported","typeLabel":"enum\u003cstring>[]"},"jwt_source":{"description":"Source of the JWT token to be used for verification.","type":"string","enum":["access_token","id_token"],"default":"access_token","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.jwt_source","typeLabel":"enum\u003cstring>"},"scopes":{"description":"List of scopes to request from the OAuth2 provider.","type":"array","items":{"type":"string","minLength":1,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.scopes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.scopes","typeLabel":"string[]"},"additional_token_params":{"description":"Extra key/value pairs sent on every token endpoint request (e.g. Auth0 'organization').","type":"object","additionalProperties":{"type":"string","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.additional_token_params.additionalProperties","typeLabel":"string"},"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1.additional_token_params","typeLabel":"object"}},"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.1","typeLabel":"MCPServerOAuth2 · object"},{"type":"object","title":"MCPServerPassthrough","description":"Authenticate using your existing TrueFoundry account (PAT or Virtual Accounts). Your credentials are automatically passed to the MCP server.","required":["type"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"+value=passthrough","type":"string","enum":["passthrough"],"default":"passthrough","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.2.type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.2","typeLabel":"MCPServerPassthrough · object"},{"type":"object","title":"MCPServerAwsSigV4Auth","description":"Sign requests to AWS Bedrock AgentCore with AWS credentials (SigV4).","required":["type","region","auth"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"+value=aws-sigv4","type":"string","enum":["aws-sigv4"],"default":"aws-sigv4","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.3.type","typeLabel":"enum\u003cstring>"},"region":{"type":"string","enum":["af-south-1","ap-east-1","ap-northeast-1","ap-northeast-2","ap-northeast-3","ap-south-1","ap-south-2","ap-southeast-1","ap-southeast-2","ap-southeast-3","ap-southeast-4","ap-southeast-5","ap-southeast-7","ca-central-1","ca-west-1","cn-north-1","cn-northwest-1","eu-central-1","eu-central-2","eu-north-1","eu-south-1","eu-south-2","eu-west-1","eu-west-2","eu-west-3","il-central-1","me-central-1","me-south-1","mx-central-1","sa-east-1","us-east-1","us-east-2","us-gov-east-1","us-gov-west-1","us-west-1","us-west-2","ap-southeast-6","ap-east-2"],"title":"AWSRegion","x-fern-type-name":"AWSRegion","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.3.region","typeLabel":"enum\u003cstring>"},"auth":{"oneOf":[{"type":"object","title":"MCPServerAwsAccessKeyAuth","description":"Authenticate with an AWS access key pair.","required":["type","access_key_id","secret_access_key"],"x-fern-type-name":"MCPServerAwsAccessKeyAuth","properties":{"type":{"description":"+value=aws-access-key","type":"string","enum":["aws-access-key"],"default":"aws-access-key","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.0.type","typeLabel":"enum\u003cstring>"},"access_key_id":{"description":"AWS access key ID. Prefer a tfy-secret reference.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.0.access_key_id","typeLabel":"string"},"secret_access_key":{"description":"AWS secret access key. Prefer a tfy-secret reference.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.0.secret_access_key","typeLabel":"string"}},"isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.0","typeLabel":"MCPServerAwsAccessKeyAuth · object"},{"type":"object","title":"MCPServerAwsAssumeRoleAuth","description":"Authenticate by assuming an IAM role (SigV4).","required":["type","assumed_role_arn"],"x-fern-type-name":"MCPServerAwsAssumeRoleAuth","properties":{"type":{"description":"+value=aws-assumed-role","type":"string","enum":["aws-assumed-role"],"default":"aws-assumed-role","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.1.type","typeLabel":"enum\u003cstring>"},"assumed_role_arn":{"description":"ARN of the role you want to assume. Prefer a tfy-secret reference.","type":"string","pattern":"^(arn:(aws|aws-us-gov|aws-cn):iam::[0-9]{12}:role(/[\\w+=,.@-]+)+|tfy-secret:\\/\\/.+:.+:.+)$","isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.1.assumed_role_arn","typeLabel":"string"},"external_id":{"description":"Optional external ID to use when assuming the role. This provides an added layer of security by ensuring only parties with the correct external ID can assume the role.","type":"string","uniqueKey":"manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.1.external_id","typeLabel":"string"}},"isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.1","typeLabel":"MCPServerAwsAssumeRoleAuth · object"}],"isRequired":true,"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.3.auth","typeLabel":"MCPServerAwsAccessKeyAuth · object | MCPServerAwsAssumeRoleAuth · object"}},"uniqueKey":"manifest.oneOf.2.auth_data.oneOf.3","typeLabel":"MCPServerAwsSigV4Auth · object"}],"uniqueKey":"manifest.oneOf.2.auth_data","typeLabel":"MCPServerHeaderAuth · object | MCPServerOAuth2 · object | MCPServerPassthrough · object | MCPServerAwsSigV4Auth · object"},"collaborators":{"description":"Users and Teams that have access to this OpenAPI Server","type":"array","items":{"type":"object","required":["subject","role_id"],"properties":{"subject":{"description":"Fully Qualified Name of the subject. eg: user:email or team:teamname","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.2.collaborators.items.[INDEX].subject","typeLabel":"string"},"role_id":{"description":"Role ID for the resource","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.2.collaborators.items.[INDEX].role_id","typeLabel":"string"}},"title":"Collaborator","x-fern-type-name":"Collaborator","uniqueKey":"manifest.oneOf.2.collaborators.items.[INDEX]","typeLabel":"Collaborator · object"},"uniqueKey":"manifest.oneOf.2.collaborators","typeLabel":"Collaborator · object[]"},"ownedBy":{"description":"Names of the owners that own this resource","type":"object","required":["account"],"properties":{"account":{"description":"The name of the account that owns this resource","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.2.ownedBy.account","typeLabel":"string"}},"title":"OwnedBy","x-fern-type-name":"OwnedBy","uniqueKey":"manifest.oneOf.2.ownedBy","typeLabel":"OwnedBy · object"},"additional_headers":{"description":"Additional HTTP headers sent on each request to the upstream OpenAPI server. If the same header is set in both `additional_headers` and `auth_data`, the `auth_data` value wins.","type":"object","uniqueKey":"manifest.oneOf.2.additional_headers","typeLabel":"object"},"forwarded_headers":{"description":"Extra header names copied from the client request to the upstream OpenAPI server. Content-Type, Accept, Last-Event-ID, and every header starting with mcp- (Mcp-Session-Id, Mcp-Protocol-Version, Mcp-Param-*) are already forwarded automatically.","type":"array","items":{"type":"string","pattern":"^[!#$%\u0026'+\\-.^_`|~0-9A-Za-z]+$","uniqueKey":"manifest.oneOf.2.forwarded_headers.items.[INDEX]","typeLabel":"string"},"uniqueKey":"manifest.oneOf.2.forwarded_headers","typeLabel":"string[]"},"tags":{"description":"Key-value pairs to categorize this OpenAPI MCP Server (e.g., by owner or environment).","type":"object","uniqueKey":"manifest.oneOf.2.tags","typeLabel":"object"}},"isRequired":true,"uniqueKey":"manifest.oneOf.2","typeLabel":"OpenAPIMCPServerManifest · object"},{"type":"object","title":"StdioMCPServerManifest","description":"The MCP server manifest describing the server type, name, auth configuration, and other settings.","required":["name","description","type","command"],"x-fern-type-name":"MCPServerManifest","properties":{"name":{"description":"The name of the MCP Server.","type":"string","pattern":"^[a-z][a-z0-9\\-]{1,71}[a-z0-9]$","isRequired":true,"uniqueKey":"manifest.oneOf.3.name","typeLabel":"string"},"description":{"description":"Provide a brief description of the purpose of this MCP Server.","type":"string","minLength":1,"maxLength":1000,"isRequired":true,"uniqueKey":"manifest.oneOf.3.description","typeLabel":"string"},"type":{"description":"+value=mcp-server/stdio\n+sort=400","type":"string","enum":["mcp-server/stdio"],"default":"mcp-server/stdio","isRequired":true,"uniqueKey":"manifest.oneOf.3.type","typeLabel":"enum\u003cstring>"},"command":{"description":"Executable to run for the stdio MCP server process.","type":"string","minLength":1,"default":"npx","isRequired":true,"uniqueKey":"manifest.oneOf.3.command","typeLabel":"string"},"display_name":{"description":"A human-readable label for the MCP Server in the UI. If omitted, the server name is shown.","type":"string","minLength":1,"maxLength":128,"uniqueKey":"manifest.oneOf.3.display_name","typeLabel":"string"},"collaborators":{"description":"Users and Teams that have access to this MCP Server","type":"array","items":{"type":"object","required":["subject","role_id"],"properties":{"subject":{"description":"Fully Qualified Name of the subject. eg: user:email or team:teamname","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.3.collaborators.items.[INDEX].subject","typeLabel":"string"},"role_id":{"description":"Role ID for the resource","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.3.collaborators.items.[INDEX].role_id","typeLabel":"string"}},"title":"Collaborator","x-fern-type-name":"Collaborator","uniqueKey":"manifest.oneOf.3.collaborators.items.[INDEX]","typeLabel":"Collaborator · object"},"uniqueKey":"manifest.oneOf.3.collaborators","typeLabel":"Collaborator · object[]"},"args":{"description":"Arguments passed to the stdio MCP server command.","type":"array","items":{"type":"string","uniqueKey":"manifest.oneOf.3.args.items.[INDEX]","typeLabel":"string"},"uniqueKey":"manifest.oneOf.3.args","typeLabel":"string[]"},"tool_settings":{"description":"Customize tool descriptions or enable/disable specific tools from the MCP Server.","type":"array","items":{"description":"MCP Tool Setting","type":"object","required":["name"],"properties":{"name":{"description":"The unique name of the tool.","type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","isRequired":true,"uniqueKey":"manifest.oneOf.3.tool_settings.items.[INDEX].name","typeLabel":"string"},"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"uniqueKey":"manifest.oneOf.3.tool_settings.items.[INDEX].description","typeLabel":"string"},"disabled":{"description":"Allows to disable the tool.","type":"boolean","uniqueKey":"manifest.oneOf.3.tool_settings.items.[INDEX].disabled","typeLabel":"boolean"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"manifest.oneOf.3.tool_settings.items.[INDEX].annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"manifest.oneOf.3.tool_settings.items.[INDEX].annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"manifest.oneOf.3.tool_settings.items.[INDEX].annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"MCPToolSetting","x-fern-type-name":"MCPToolSetting","uniqueKey":"manifest.oneOf.3.tool_settings.items.[INDEX]","typeLabel":"MCPToolSetting · object"},"uniqueKey":"manifest.oneOf.3.tool_settings","typeLabel":"MCPToolSetting · object[]"},"tool_policy":{"description":"Enable/disable policy for MCP tools.","type":"object","required":["enable_tools_by_default"],"properties":{"enable_tools_by_default":{"description":"When true, all tools are exposed except those in disabled_tools. When false, only tools listed in enabled_tools are exposed.","type":"boolean","enum":[true,false],"default":true,"isRequired":true,"uniqueKey":"manifest.oneOf.3.tool_policy.enable_tools_by_default","typeLabel":"enum\u003cboolean>"},"disabled_tools":{"description":"Tool names to disable when enable_tools_by_default is true.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","uniqueKey":"manifest.oneOf.3.tool_policy.disabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"manifest.oneOf.3.tool_policy.disabled_tools","typeLabel":"string[]"},"enabled_tools":{"description":"Tool names to enable when enable_tools_by_default is false.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","uniqueKey":"manifest.oneOf.3.tool_policy.enabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"manifest.oneOf.3.tool_policy.enabled_tools","typeLabel":"string[]"}},"title":"MCPToolPolicy","x-fern-type-name":"MCPToolPolicy","uniqueKey":"manifest.oneOf.3.tool_policy","typeLabel":"MCPToolPolicy · object"},"tool_metadata":{"description":"Per-tool description and annotation overrides keyed by tool name.","type":"object","additionalProperties":{"description":"Description and annotation overrides for a single MCP tool.","type":"object","properties":{"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"uniqueKey":"manifest.oneOf.3.tool_metadata.additionalProperties.description","typeLabel":"string"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"manifest.oneOf.3.tool_metadata.additionalProperties.annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"manifest.oneOf.3.tool_metadata.additionalProperties.annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"manifest.oneOf.3.tool_metadata.additionalProperties.annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"MCPToolMetadata","x-fern-type-name":"MCPToolMetadata","uniqueKey":"manifest.oneOf.3.tool_metadata.additionalProperties","typeLabel":"MCPToolMetadata · object"},"uniqueKey":"manifest.oneOf.3.tool_metadata","typeLabel":"object"},"auth_data":{"description":"Environment variable authentication for stdio MCP. For individual credentials, use one or more {{placeholder}} names in values (same rules as header auth).","type":"object","required":["type","env"],"properties":{"type":{"description":"+value=env","type":"string","enum":["env"],"default":"env","isRequired":true,"uniqueKey":"manifest.oneOf.3.auth_data.type","typeLabel":"enum\u003cstring>"},"env":{"description":"Map each env variable to its value. For shared, enter the actual value. For individual, use a placeholder that will be filled in by each user (e.g. API_KEY {{API_KEY}}).","type":"object","additionalProperties":{"type":"string","uniqueKey":"manifest.oneOf.3.auth_data.env.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"manifest.oneOf.3.auth_data.env","typeLabel":"object"},"auth_level":{"description":"Level at which this authentication will be applied. Values: global (default), per_user","type":"string","enum":["global","per_user"],"default":"global","uniqueKey":"manifest.oneOf.3.auth_data.auth_level","typeLabel":"enum\u003cstring>"}},"title":"MCPServerEnvAuth","x-fern-type-name":"MCPServerEnvAuth","uniqueKey":"manifest.oneOf.3.auth_data","typeLabel":"MCPServerEnvAuth · object"},"ownedBy":{"description":"Names of the owners that own this resource","type":"object","required":["account"],"properties":{"account":{"description":"The name of the account that owns this resource","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.3.ownedBy.account","typeLabel":"string"}},"title":"OwnedBy","x-fern-type-name":"OwnedBy","uniqueKey":"manifest.oneOf.3.ownedBy","typeLabel":"OwnedBy · object"},"tags":{"description":"Key-value pairs to categorize this MCP Server (e.g., by owner or environment).","type":"object","uniqueKey":"manifest.oneOf.3.tags","typeLabel":"object"}},"isRequired":true,"uniqueKey":"manifest.oneOf.3","typeLabel":"StdioMCPServerManifest · object"},{"type":"object","title":"TfyManagedMCPServerManifest","description":"The MCP server manifest describing the server type, name, auth configuration, and other settings.","required":["type","name","description","server_identifier"],"x-fern-type-name":"MCPServerManifest","properties":{"type":{"description":"+value=mcp-server/tfy-managed","type":"string","enum":["mcp-server/tfy-managed"],"default":"mcp-server/tfy-managed","isRequired":true,"uniqueKey":"manifest.oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"The name of the MCP Server.","type":"string","pattern":"^[a-z][a-z0-9\\-]{1,71}[a-z0-9]$","isRequired":true,"uniqueKey":"manifest.oneOf.4.name","typeLabel":"string"},"description":{"description":"Provide a brief description of the purpose of this MCP Server.","type":"string","minLength":1,"maxLength":1000,"isRequired":true,"uniqueKey":"manifest.oneOf.4.description","typeLabel":"string"},"server_identifier":{"description":"Catalog slug of the TrueFoundry-managed MCP server to connect to. Used to resolve the hosted endpoint and available tools.","type":"string","pattern":"^[a-z][a-z0-9\\-]{1,71}[a-z0-9]$","isRequired":true,"uniqueKey":"manifest.oneOf.4.server_identifier","typeLabel":"string"},"display_name":{"description":"A human-readable label for the MCP Server in the UI. If omitted, the server name is shown.","type":"string","minLength":1,"maxLength":128,"uniqueKey":"manifest.oneOf.4.display_name","typeLabel":"string"},"tool_settings":{"description":"Customize tool descriptions or enable/disable specific tools from the MCP Server.","type":"array","items":{"description":"MCP Tool Setting","type":"object","required":["name"],"properties":{"name":{"description":"The unique name of the tool.","type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","isRequired":true,"uniqueKey":"manifest.oneOf.4.tool_settings.items.[INDEX].name","typeLabel":"string"},"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"uniqueKey":"manifest.oneOf.4.tool_settings.items.[INDEX].description","typeLabel":"string"},"disabled":{"description":"Allows to disable the tool.","type":"boolean","uniqueKey":"manifest.oneOf.4.tool_settings.items.[INDEX].disabled","typeLabel":"boolean"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"manifest.oneOf.4.tool_settings.items.[INDEX].annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"manifest.oneOf.4.tool_settings.items.[INDEX].annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"manifest.oneOf.4.tool_settings.items.[INDEX].annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"MCPToolSetting","x-fern-type-name":"MCPToolSetting","uniqueKey":"manifest.oneOf.4.tool_settings.items.[INDEX]","typeLabel":"MCPToolSetting · object"},"uniqueKey":"manifest.oneOf.4.tool_settings","typeLabel":"MCPToolSetting · object[]"},"tool_policy":{"description":"Enable/disable policy for MCP tools.","type":"object","required":["enable_tools_by_default"],"properties":{"enable_tools_by_default":{"description":"When true, all tools are exposed except those in disabled_tools. When false, only tools listed in enabled_tools are exposed.","type":"boolean","enum":[true,false],"default":true,"isRequired":true,"uniqueKey":"manifest.oneOf.4.tool_policy.enable_tools_by_default","typeLabel":"enum\u003cboolean>"},"disabled_tools":{"description":"Tool names to disable when enable_tools_by_default is true.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","uniqueKey":"manifest.oneOf.4.tool_policy.disabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"manifest.oneOf.4.tool_policy.disabled_tools","typeLabel":"string[]"},"enabled_tools":{"description":"Tool names to enable when enable_tools_by_default is false.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","uniqueKey":"manifest.oneOf.4.tool_policy.enabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"manifest.oneOf.4.tool_policy.enabled_tools","typeLabel":"string[]"}},"title":"MCPToolPolicy","x-fern-type-name":"MCPToolPolicy","uniqueKey":"manifest.oneOf.4.tool_policy","typeLabel":"MCPToolPolicy · object"},"tool_metadata":{"description":"Per-tool description and annotation overrides keyed by tool name.","type":"object","additionalProperties":{"description":"Description and annotation overrides for a single MCP tool.","type":"object","properties":{"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"uniqueKey":"manifest.oneOf.4.tool_metadata.additionalProperties.description","typeLabel":"string"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"manifest.oneOf.4.tool_metadata.additionalProperties.annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"manifest.oneOf.4.tool_metadata.additionalProperties.annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"manifest.oneOf.4.tool_metadata.additionalProperties.annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"MCPToolMetadata","x-fern-type-name":"MCPToolMetadata","uniqueKey":"manifest.oneOf.4.tool_metadata.additionalProperties","typeLabel":"MCPToolMetadata · object"},"uniqueKey":"manifest.oneOf.4.tool_metadata","typeLabel":"object"},"collaborators":{"description":"Users and Teams that have access to this MCP Server","type":"array","items":{"type":"object","required":["subject","role_id"],"properties":{"subject":{"description":"Fully Qualified Name of the subject. eg: user:email or team:teamname","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.4.collaborators.items.[INDEX].subject","typeLabel":"string"},"role_id":{"description":"Role ID for the resource","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.4.collaborators.items.[INDEX].role_id","typeLabel":"string"}},"title":"Collaborator","x-fern-type-name":"Collaborator","uniqueKey":"manifest.oneOf.4.collaborators.items.[INDEX]","typeLabel":"Collaborator · object"},"uniqueKey":"manifest.oneOf.4.collaborators","typeLabel":"Collaborator · object[]"},"ownedBy":{"description":"Names of the owners that own this resource","type":"object","required":["account"],"properties":{"account":{"description":"The name of the account that owns this resource","type":"string","isRequired":true,"uniqueKey":"manifest.oneOf.4.ownedBy.account","typeLabel":"string"}},"title":"OwnedBy","x-fern-type-name":"OwnedBy","uniqueKey":"manifest.oneOf.4.ownedBy","typeLabel":"OwnedBy · object"},"auth_data":{"description":"TfyManaged OAuth2","type":"object","required":["type","grant_type"],"properties":{"type":{"description":"OAuth2 authentication","type":"string","enum":["oauth2"],"default":"oauth2","isRequired":true,"uniqueKey":"manifest.oneOf.4.auth_data.type","typeLabel":"enum\u003cstring>"},"grant_type":{"description":"The OAuth2 grant type to use for authentication.","type":"string","enum":["authorization_code"],"isRequired":true,"uniqueKey":"manifest.oneOf.4.auth_data.grant_type","typeLabel":"enum\u003cstring>"}},"title":"TfyManagedMCPServerOAuth","x-fern-type-name":"TfyManagedMCPServerOAuth","uniqueKey":"manifest.oneOf.4.auth_data","typeLabel":"TfyManagedMCPServerOAuth · object"},"tags":{"description":"Key-value pairs to categorize this MCP Server (e.g., by owner or environment).","type":"object","uniqueKey":"manifest.oneOf.4.tags","typeLabel":"object"}},"isRequired":true,"uniqueKey":"manifest.oneOf.4","typeLabel":"TfyManagedMCPServerManifest · object"}],"isRequired":true,"uniqueKey":"manifest","typeLabel":"RemoteMCPServerManifest · object | VirtualMCPServerManifest · object | OpenAPIMCPServerManifest · object | StdioMCPServerManifest · object | TfyManagedMCPServerManifest · object"},"dryRun":{"oneOf":[{"type":"boolean","default":false,"description":"When `true`, validates and resolves the manifest without persisting or syncing to the gateway store.","uniqueKey":"dryRun.oneOf.0","typeLabel":"boolean"},{"type":"null","default":false,"description":"When `true`, validates and resolves the manifest without persisting or syncing to the gateway store.","uniqueKey":"dryRun.oneOf.1","typeLabel":"null"}],"uniqueKey":"dryRun","typeLabel":"boolean | null"},"force":{"oneOf":[{"type":"boolean","default":false,"description":"When `true`, acknowledges that updating this manifest will delete existing per-subject auth records.","uniqueKey":"force.oneOf.0","typeLabel":"boolean"},{"type":"null","default":false,"description":"When `true`, acknowledges that updating this manifest will delete existing per-subject auth records.","uniqueKey":"force.oneOf.1","typeLabel":"null"}],"uniqueKey":"force","typeLabel":"boolean | null"}},"required":["manifest"],"title":"CreateOrUpdateMCPServerRequest","x-fern-type-name":"CreateOrUpdateMCPServerRequest","uniqueKey":"","typeLabel":"CreateOrUpdateMCPServerRequest · object"},"examples":{"Example":{"title":"Example","value":{"manifest":{"type":"mcp-server/remote","name":"\u003cstring>","description":"\u003cstring>","url":"\u003cstring>","display_name":"\u003cstring>","tool_settings":[{"name":"\u003cstring>","description":"\u003cstring>","disabled":true,"annotations":{"readOnlyHint":true,"destructiveHint":true}}],"tool_metadata":{},"auth_data":{"type":"header","headers":{},"auth_level":"global"},"collaborators":[{"subject":"\u003cstring>","role_id":"\u003cstring>"}],"additional_headers":{},"forwarded_headers":["\u003cstring>"],"tags":{}},"dryRun":false,"force":false}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"0560f608-ae8d-468d-a155-4ad138af0519":{"description":"The created or updated MCP server.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","title":"MCPServerV2","description":"The MCP server data.","required":["fqn","tenantName","manifest","createdBySubject"],"x-fern-type-name":"MCPServerV2","properties":{"fqn":{"type":"string","description":"Fully qualified name.","example":"my-tenant:mcp-server:filesystem-tools","isRequired":true,"uniqueKey":"data.fqn","typeLabel":"string"},"tenantName":{"type":"string","description":"Tenant the MCP server belongs to.","isRequired":true,"uniqueKey":"data.tenantName","typeLabel":"string"},"manifest":{"oneOf":[{"type":"object","title":"RemoteMCPServerManifest","description":"User-supplied MCP server configuration. Sensitive fields inside `auth_data` (and other manifest secrets) are redacted for callers who do not have `MANAGE_MCP_SERVER` permission on this server.","required":["type","name","description","url"],"x-fern-type-name":"MCPServerManifest","properties":{"type":{"description":"+value=mcp-server/remote","type":"string","enum":["mcp-server/remote"],"default":"mcp-server/remote","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.type","typeLabel":"enum\u003cstring>"},"name":{"description":"The name of the MCP Server.","type":"string","pattern":"^[a-z][a-z0-9\\-]{1,71}[a-z0-9]$","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.name","typeLabel":"string"},"description":{"description":"Provide a brief description of the purpose of this MCP Server.","type":"string","minLength":1,"maxLength":1000,"isRequired":true,"uniqueKey":"data.manifest.oneOf.0.description","typeLabel":"string"},"url":{"description":"The endpoint URL for the MCP Server.","type":"string","pattern":"^https?:\\/\\/[^\\s]+$","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.url","typeLabel":"string"},"display_name":{"description":"A human-readable label for the MCP Server in the UI. If omitted, the server name is shown.","type":"string","minLength":1,"maxLength":128,"uniqueKey":"data.manifest.oneOf.0.display_name","typeLabel":"string"},"tls_settings":{"description":"Configure TLS settings for secure connections with custom CA certificates.","type":"object","required":["reject_unauthorized"],"properties":{"reject_unauthorized":{"description":"When set to true, it will reject any connection which is not authorized with the list of supplied CAs.","type":"boolean","default":true,"isRequired":true,"uniqueKey":"data.manifest.oneOf.0.tls_settings.reject_unauthorized","typeLabel":"boolean"},"ca_cert":{"description":"Add custom CA certificates to use for TLS verification.","type":"string","uniqueKey":"data.manifest.oneOf.0.tls_settings.ca_cert","typeLabel":"string"}},"title":"CustomTLSSettings","x-fern-type-name":"CustomTLSSettings","uniqueKey":"data.manifest.oneOf.0.tls_settings","typeLabel":"CustomTLSSettings · object"},"tool_settings":{"description":"Customize tool descriptions or enable/disable specific tools from the MCP Server.","type":"array","items":{"description":"MCP Tool Setting","type":"object","required":["name"],"properties":{"name":{"description":"The unique name of the tool.","type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.tool_settings.items.[INDEX].name","typeLabel":"string"},"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"uniqueKey":"data.manifest.oneOf.0.tool_settings.items.[INDEX].description","typeLabel":"string"},"disabled":{"description":"Allows to disable the tool.","type":"boolean","uniqueKey":"data.manifest.oneOf.0.tool_settings.items.[INDEX].disabled","typeLabel":"boolean"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"data.manifest.oneOf.0.tool_settings.items.[INDEX].annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"data.manifest.oneOf.0.tool_settings.items.[INDEX].annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"data.manifest.oneOf.0.tool_settings.items.[INDEX].annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"MCPToolSetting","x-fern-type-name":"MCPToolSetting","uniqueKey":"data.manifest.oneOf.0.tool_settings.items.[INDEX]","typeLabel":"MCPToolSetting · object"},"uniqueKey":"data.manifest.oneOf.0.tool_settings","typeLabel":"MCPToolSetting · object[]"},"tool_policy":{"description":"Enable/disable policy for MCP tools.","type":"object","required":["enable_tools_by_default"],"properties":{"enable_tools_by_default":{"description":"When true, all tools are exposed except those in disabled_tools. When false, only tools listed in enabled_tools are exposed.","type":"boolean","enum":[true,false],"default":true,"isRequired":true,"uniqueKey":"data.manifest.oneOf.0.tool_policy.enable_tools_by_default","typeLabel":"enum\u003cboolean>"},"disabled_tools":{"description":"Tool names to disable when enable_tools_by_default is true.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","uniqueKey":"data.manifest.oneOf.0.tool_policy.disabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.0.tool_policy.disabled_tools","typeLabel":"string[]"},"enabled_tools":{"description":"Tool names to enable when enable_tools_by_default is false.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","uniqueKey":"data.manifest.oneOf.0.tool_policy.enabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.0.tool_policy.enabled_tools","typeLabel":"string[]"}},"title":"MCPToolPolicy","x-fern-type-name":"MCPToolPolicy","uniqueKey":"data.manifest.oneOf.0.tool_policy","typeLabel":"MCPToolPolicy · object"},"tool_metadata":{"description":"Per-tool description and annotation overrides keyed by tool name.","type":"object","additionalProperties":{"description":"Description and annotation overrides for a single MCP tool.","type":"object","properties":{"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"uniqueKey":"data.manifest.oneOf.0.tool_metadata.additionalProperties.description","typeLabel":"string"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"data.manifest.oneOf.0.tool_metadata.additionalProperties.annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"data.manifest.oneOf.0.tool_metadata.additionalProperties.annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"data.manifest.oneOf.0.tool_metadata.additionalProperties.annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"MCPToolMetadata","x-fern-type-name":"MCPToolMetadata","uniqueKey":"data.manifest.oneOf.0.tool_metadata.additionalProperties","typeLabel":"MCPToolMetadata · object"},"uniqueKey":"data.manifest.oneOf.0.tool_metadata","typeLabel":"object"},"auth_data":{"oneOf":[{"type":"object","title":"MCPServerHeaderAuth","description":"Authenticate using a static key or token sent as a request header. Choose shared vs individual credentials below.","required":["type","headers","auth_level"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"+value=header","type":"string","enum":["header"],"default":"header","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.0.type","typeLabel":"enum\u003cstring>"},"headers":{"description":"Map each header name to its value. For shared, enter the actual value. For individual, use a placeholder that will be filled in by each user (e.g. Bearer {{API_KEY}}).","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.0.headers.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.0.headers","typeLabel":"object"},"auth_level":{"description":"Level at which this authentication will be applied. Values: global (default), per_user","type":"string","enum":["global","per_user"],"default":"global","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.0.auth_level","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.0","typeLabel":"MCPServerHeaderAuth · object"},{"type":"object","title":"MCPServerOAuth2","description":"OAuth2","required":["type","grant_type","provider"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"OAuth2 authentication","type":"string","enum":["oauth2"],"default":"oauth2","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.type","typeLabel":"enum\u003cstring>"},"grant_type":{"description":"The OAuth2 grant type to use for authentication.","type":"string","enum":["authorization_code","client_credentials","token_exchange","id_jag","jwt_bearer"],"default":"authorization_code","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.grant_type","typeLabel":"enum\u003cstring>"},"provider":{"description":"Select the OAuth provider. Provider-specific configuration (e.g. Auth0 organization) is unlocked based on this value.","type":"string","enum":["custom","auth0","okta","microsoft-entra"],"default":"custom","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"use_organization":{"description":"When enabled, organization will be extracted from the inbound token and it will be included as the organization parameter on token endpoint requests.","type":"boolean","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.use_organization","typeLabel":"boolean"},"default_organization":{"description":"Fallback Auth0 organization when the inbound token does not include organization.","type":"string","pattern":"^\\S+$","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.default_organization","typeLabel":"string"},"audience":{"description":"Okta target audience (RFC 8693 'audience'). Required when the token_exchange grant type is used with the okta provider.","type":"string","pattern":"^\\S+$","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.audience","typeLabel":"string"},"issuer_uri":{"description":"Issuer URI of the authorization server the ID-JAG token is issued for. Sent as the 'audience' parameter on the ID-JAG token exchange.","type":"string","pattern":"^\\S+$","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.issuer_uri","typeLabel":"string"},"authorization_url":{"description":"URL for the authorization request","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.authorization_url","typeLabel":"string"},"token_url":{"description":"The endpoint to exchange auth code for tokens.","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.token_url","typeLabel":"string"},"client_id":{"description":"client ID for OAuth2 or the TrueFoundry secret FQN containing the client ID.","type":"string","pattern":"^\\S+$","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.client_id","typeLabel":"string"},"client_authentication":{"description":"How the OAuth client authenticates to the token endpoint. Certificate auth is available for Microsoft Entra client_credentials and jwt_bearer (on-behalf-of).","type":"string","enum":["client_secret","certificate"],"default":"client_secret","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.client_authentication","typeLabel":"enum\u003cstring>"},"client_secret":{"description":"Client secret or the TrueFoundry secret FQN containing the client secret for OAuth2.","type":"string","minLength":1,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.client_secret","typeLabel":"string"},"certificate_thumbprint":{"description":"Hex SHA-1 thumbprint from the Azure portal, or the TrueFoundry secret FQN containing it.","type":"string","pattern":"^\\S+$","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.certificate_thumbprint","typeLabel":"string"},"private_key":{"description":"PEM private key for Microsoft Entra certificate-based client authentication, or the TrueFoundry secret FQN containing it.","type":"string","minLength":1,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.private_key","typeLabel":"string"},"registration_url":{"description":"URL for dynamic client registration (RFC 7591). If provided, client credentials will be obtained automatically using the Dynamic Client Registration (DCR) process.","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.registration_url","typeLabel":"string"},"introspection_url":{"description":"URL to fetch token expiry (RFC 7662) when the provider does not return expires_in (e.g. Salesforce). Requires client_id and client_secret.","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.introspection_url","typeLabel":"string"},"include_resource":{"description":"When enabled, the MCP server URL is sent as the resource parameter (RFC 8707) on both authorization and token endpoint requests.","type":"boolean","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.include_resource","typeLabel":"boolean"},"code_challenge_methods_supported":{"description":"List of supported PKCE code challenge methods (S256 only)","type":"array","items":{"type":"string","enum":["S256"],"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.code_challenge_methods_supported.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.code_challenge_methods_supported","typeLabel":"enum\u003cstring>[]"},"jwt_source":{"description":"Source of the JWT token to be used for verification.","type":"string","enum":["access_token","id_token"],"default":"access_token","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.jwt_source","typeLabel":"enum\u003cstring>"},"scopes":{"description":"List of scopes to request from the OAuth2 provider.","type":"array","items":{"type":"string","minLength":1,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.scopes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.scopes","typeLabel":"string[]"},"additional_token_params":{"description":"Extra key/value pairs sent on every token endpoint request (e.g. Auth0 'organization').","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.additional_token_params.additionalProperties","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1.additional_token_params","typeLabel":"object"}},"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.1","typeLabel":"MCPServerOAuth2 · object"},{"type":"object","title":"MCPServerPassthrough","description":"Authenticate using your existing TrueFoundry account (PAT or Virtual Accounts). Your credentials are automatically passed to the MCP server.","required":["type"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"+value=passthrough","type":"string","enum":["passthrough"],"default":"passthrough","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.2.type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.2","typeLabel":"MCPServerPassthrough · object"},{"type":"object","title":"MCPServerAwsSigV4Auth","description":"Sign requests to AWS Bedrock AgentCore with AWS credentials (SigV4).","required":["type","region","auth"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"+value=aws-sigv4","type":"string","enum":["aws-sigv4"],"default":"aws-sigv4","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.3.type","typeLabel":"enum\u003cstring>"},"region":{"type":"string","enum":["af-south-1","ap-east-1","ap-northeast-1","ap-northeast-2","ap-northeast-3","ap-south-1","ap-south-2","ap-southeast-1","ap-southeast-2","ap-southeast-3","ap-southeast-4","ap-southeast-5","ap-southeast-7","ca-central-1","ca-west-1","cn-north-1","cn-northwest-1","eu-central-1","eu-central-2","eu-north-1","eu-south-1","eu-south-2","eu-west-1","eu-west-2","eu-west-3","il-central-1","me-central-1","me-south-1","mx-central-1","sa-east-1","us-east-1","us-east-2","us-gov-east-1","us-gov-west-1","us-west-1","us-west-2","ap-southeast-6","ap-east-2"],"title":"AWSRegion","x-fern-type-name":"AWSRegion","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.3.region","typeLabel":"enum\u003cstring>"},"auth":{"oneOf":[{"type":"object","title":"MCPServerAwsAccessKeyAuth","description":"Authenticate with an AWS access key pair.","required":["type","access_key_id","secret_access_key"],"x-fern-type-name":"MCPServerAwsAccessKeyAuth","properties":{"type":{"description":"+value=aws-access-key","type":"string","enum":["aws-access-key"],"default":"aws-access-key","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.0.type","typeLabel":"enum\u003cstring>"},"access_key_id":{"description":"AWS access key ID. Prefer a tfy-secret reference.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.0.access_key_id","typeLabel":"string"},"secret_access_key":{"description":"AWS secret access key. Prefer a tfy-secret reference.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.0.secret_access_key","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.0","typeLabel":"MCPServerAwsAccessKeyAuth · object"},{"type":"object","title":"MCPServerAwsAssumeRoleAuth","description":"Authenticate by assuming an IAM role (SigV4).","required":["type","assumed_role_arn"],"x-fern-type-name":"MCPServerAwsAssumeRoleAuth","properties":{"type":{"description":"+value=aws-assumed-role","type":"string","enum":["aws-assumed-role"],"default":"aws-assumed-role","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.1.type","typeLabel":"enum\u003cstring>"},"assumed_role_arn":{"description":"ARN of the role you want to assume. Prefer a tfy-secret reference.","type":"string","pattern":"^(arn:(aws|aws-us-gov|aws-cn):iam::[0-9]{12}:role(/[\\w+=,.@-]+)+|tfy-secret:\\/\\/.+:.+:.+)$","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.1.assumed_role_arn","typeLabel":"string"},"external_id":{"description":"Optional external ID to use when assuming the role. This provides an added layer of security by ensuring only parties with the correct external ID can assume the role.","type":"string","uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.1.external_id","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.3.auth.oneOf.1","typeLabel":"MCPServerAwsAssumeRoleAuth · object"}],"isRequired":true,"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.3.auth","typeLabel":"MCPServerAwsAccessKeyAuth · object | MCPServerAwsAssumeRoleAuth · object"}},"uniqueKey":"data.manifest.oneOf.0.auth_data.oneOf.3","typeLabel":"MCPServerAwsSigV4Auth · object"}],"uniqueKey":"data.manifest.oneOf.0.auth_data","typeLabel":"MCPServerHeaderAuth · object | MCPServerOAuth2 · object | MCPServerPassthrough · object | MCPServerAwsSigV4Auth · object"},"collaborators":{"description":"Users and Teams that have access to this MCP Server","type":"array","items":{"type":"object","required":["subject","role_id"],"properties":{"subject":{"description":"Fully Qualified Name of the subject. eg: user:email or team:teamname","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.collaborators.items.[INDEX].subject","typeLabel":"string"},"role_id":{"description":"Role ID for the resource","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.collaborators.items.[INDEX].role_id","typeLabel":"string"}},"title":"Collaborator","x-fern-type-name":"Collaborator","uniqueKey":"data.manifest.oneOf.0.collaborators.items.[INDEX]","typeLabel":"Collaborator · object"},"uniqueKey":"data.manifest.oneOf.0.collaborators","typeLabel":"Collaborator · object[]"},"ownedBy":{"description":"Names of the owners that own this resource","type":"object","required":["account"],"properties":{"account":{"description":"The name of the account that owns this resource","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.0.ownedBy.account","typeLabel":"string"}},"title":"OwnedBy","x-fern-type-name":"OwnedBy","uniqueKey":"data.manifest.oneOf.0.ownedBy","typeLabel":"OwnedBy · object"},"additional_headers":{"description":"Additional HTTP headers sent on each request to the MCP server. If the same header is set in both `additional_headers` and `auth_data`, the `auth_data` value wins.","type":"object","uniqueKey":"data.manifest.oneOf.0.additional_headers","typeLabel":"object"},"forwarded_headers":{"description":"Extra header names copied from the client request to the upstream MCP server. Content-Type, Accept, Last-Event-ID, and every header starting with mcp- (Mcp-Session-Id, Mcp-Protocol-Version, Mcp-Param-*) are already forwarded automatically.","type":"array","items":{"type":"string","pattern":"^[!#$%\u0026'+\\-.^_`|~0-9A-Za-z]+$","uniqueKey":"data.manifest.oneOf.0.forwarded_headers.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.0.forwarded_headers","typeLabel":"string[]"},"tags":{"description":"Key-value pairs to categorize this MCP Server (e.g., by owner or environment).","type":"object","uniqueKey":"data.manifest.oneOf.0.tags","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data.manifest.oneOf.0","typeLabel":"RemoteMCPServerManifest · object"},{"type":"object","title":"VirtualMCPServerManifest","description":"User-supplied MCP server configuration. Sensitive fields inside `auth_data` (and other manifest secrets) are redacted for callers who do not have `MANAGE_MCP_SERVER` permission on this server.","required":["type","name","description","servers"],"x-fern-type-name":"MCPServerManifest","properties":{"type":{"description":"+value=mcp-server/virtual","type":"string","enum":["mcp-server/virtual"],"default":"mcp-server/virtual","isRequired":true,"uniqueKey":"data.manifest.oneOf.1.type","typeLabel":"enum\u003cstring>"},"name":{"description":"The name of the Virtual MCP Server.","type":"string","pattern":"^[a-z][a-z0-9\\-]{1,71}[a-z0-9]$","isRequired":true,"uniqueKey":"data.manifest.oneOf.1.name","typeLabel":"string"},"description":{"description":"Provide a brief description of the purpose of this Virtual MCP Server.","type":"string","minLength":1,"maxLength":1000,"isRequired":true,"uniqueKey":"data.manifest.oneOf.1.description","typeLabel":"string"},"servers":{"description":"List of source MCP servers to include in this virtual server.","type":"array","items":{"description":"MCP Server Source","type":"object","required":["name"],"properties":{"name":{"description":"Name of the MCP server","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.1.servers.items.[INDEX].name","typeLabel":"string"},"enabled_tools":{"description":"List of tools to enable from this source server.","type":"array","items":{"type":"string","uniqueKey":"data.manifest.oneOf.1.servers.items.[INDEX].enabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.1.servers.items.[INDEX].enabled_tools","typeLabel":"string[]"},"tool_slug":{"description":"Suffix appended to this server's tool names. Defaults to an auto-generated suffix.","type":"string","pattern":"^[a-z0-9]([a-z0-9-]{0,14}[a-z0-9])?$","uniqueKey":"data.manifest.oneOf.1.servers.items.[INDEX].tool_slug","typeLabel":"string"}},"title":"McpServerSource","x-fern-type-name":"McpServerSource","uniqueKey":"data.manifest.oneOf.1.servers.items.[INDEX]","typeLabel":"McpServerSource · object"},"isRequired":true,"uniqueKey":"data.manifest.oneOf.1.servers","typeLabel":"McpServerSource · object[]"},"display_name":{"description":"A human-readable label for the Virtual MCP Server in the UI. If omitted, the server name is shown.","type":"string","minLength":1,"maxLength":128,"uniqueKey":"data.manifest.oneOf.1.display_name","typeLabel":"string"},"best_effort_mode":{"description":"When enabled, the virtual MCP server continues with available source servers even if some servers fail.","type":"boolean","default":false,"uniqueKey":"data.manifest.oneOf.1.best_effort_mode","typeLabel":"boolean"},"collaborators":{"description":"Users and Teams that have access to this Virtual MCP Server","type":"array","items":{"type":"object","required":["subject","role_id"],"properties":{"subject":{"description":"Fully Qualified Name of the subject. eg: user:email or team:teamname","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.1.collaborators.items.[INDEX].subject","typeLabel":"string"},"role_id":{"description":"Role ID for the resource","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.1.collaborators.items.[INDEX].role_id","typeLabel":"string"}},"title":"Collaborator","x-fern-type-name":"Collaborator","uniqueKey":"data.manifest.oneOf.1.collaborators.items.[INDEX]","typeLabel":"Collaborator · object"},"uniqueKey":"data.manifest.oneOf.1.collaborators","typeLabel":"Collaborator · object[]"},"ownedBy":{"description":"Names of the owners that own this resource","type":"object","required":["account"],"properties":{"account":{"description":"The name of the account that owns this resource","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.1.ownedBy.account","typeLabel":"string"}},"title":"OwnedBy","x-fern-type-name":"OwnedBy","uniqueKey":"data.manifest.oneOf.1.ownedBy","typeLabel":"OwnedBy · object"},"tags":{"description":"Key-value pairs to categorize this Virtual MCP Server (e.g., by owner or environment).","type":"object","uniqueKey":"data.manifest.oneOf.1.tags","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data.manifest.oneOf.1","typeLabel":"VirtualMCPServerManifest · object"},{"type":"object","title":"OpenAPIMCPServerManifest","description":"User-supplied MCP server configuration. Sensitive fields inside `auth_data` (and other manifest secrets) are redacted for callers who do not have `MANAGE_MCP_SERVER` permission on this server.","required":["type","name","description","url","openapi_spec_source"],"x-fern-type-name":"MCPServerManifest","properties":{"type":{"description":"+value=mcp-server/openapi","type":"string","enum":["mcp-server/openapi"],"default":"mcp-server/openapi","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.type","typeLabel":"enum\u003cstring>"},"name":{"description":"The name of the OpenAPI MCP Server.","type":"string","pattern":"^[a-z][a-z0-9\\-]{1,71}[a-z0-9]$","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.name","typeLabel":"string"},"description":{"description":"Provide a brief description of the purpose of this OpenAPI MCP Server.","type":"string","minLength":1,"maxLength":1000,"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.description","typeLabel":"string"},"url":{"description":"The base URL where API requests will be sent. This should be the root endpoint of your API server, without any path suffix.","type":"string","pattern":"^https?:\\/\\/[^\\s]+$","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.url","typeLabel":"string"},"openapi_spec_source":{"oneOf":[{"type":"object","title":"RemoteSpecSource","description":"Fetch the OpenAPI specification from a remote HTTP/HTTPS endpoint.","required":["type","url"],"x-fern-type-name":"OpenAPISpecSource","properties":{"type":{"description":"+value=remote","type":"string","enum":["remote"],"default":"remote","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.openapi_spec_source.oneOf.0.type","typeLabel":"enum\u003cstring>"},"url":{"description":"URL to fetch the OpenAPI specification (JSON or YAML format).","type":"string","pattern":"^https?:\\/\\/[^\\s]+$","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.openapi_spec_source.oneOf.0.url","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.openapi_spec_source.oneOf.0","typeLabel":"RemoteSpecSource · object"},{"type":"object","title":"UploadSpecSource","description":"Fetch the stored/uploaded OpenAPI specification.","required":["type","url"],"x-fern-type-name":"OpenAPISpecSource","properties":{"type":{"description":"+value=upload","type":"string","enum":["upload"],"default":"upload","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.openapi_spec_source.oneOf.1.type","typeLabel":"enum\u003cstring>"},"url":{"description":"Cloud storage path where the OpenAPI specification is stored (S3, GCS, or Azure Blob).","type":"string","pattern":"^(s3://[^/]+|gs://[^/]+|https://[^.]+\\.blob\\.core\\.windows\\.net/[^/]+)/tfy-openapi-specs/(?:\\d{4}-\\d{2}/|[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+/)[a-f0-9-]+\\.json$","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.openapi_spec_source.oneOf.1.url","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.openapi_spec_source.oneOf.1","typeLabel":"UploadSpecSource · object"},{"type":"object","title":"InlineSpecSource","description":"Inline your OpenAPI specification directly. The spec will be stored securely.","required":["type","openapi_spec"],"x-fern-type-name":"OpenAPISpecSource","properties":{"type":{"description":"+value=inline","type":"string","enum":["inline"],"default":"inline","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.openapi_spec_source.oneOf.2.type","typeLabel":"enum\u003cstring>"},"openapi_spec":{"oneOf":[{"type":"object","description":"The OpenAPI specification as a JSON object or a JSON/YAML string.","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.openapi_spec_source.oneOf.2.openapi_spec.oneOf.0","typeLabel":"object"},{"type":"string","description":"The OpenAPI specification as a JSON object or a JSON/YAML string.","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.openapi_spec_source.oneOf.2.openapi_spec.oneOf.1","typeLabel":"string"}],"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.openapi_spec_source.oneOf.2.openapi_spec","typeLabel":"object | string"}},"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.openapi_spec_source.oneOf.2","typeLabel":"InlineSpecSource · object"}],"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.openapi_spec_source","typeLabel":"RemoteSpecSource · object | UploadSpecSource · object | InlineSpecSource · object"},"display_name":{"description":"A human-readable label for the OpenAPI MCP Server in the UI. If omitted, the server name is shown.","type":"string","minLength":1,"maxLength":128,"uniqueKey":"data.manifest.oneOf.2.display_name","typeLabel":"string"},"tls_settings":{"description":"Configure TLS settings for secure connections with custom CA certificates.","type":"object","required":["reject_unauthorized"],"properties":{"reject_unauthorized":{"description":"When set to true, it will reject any connection which is not authorized with the list of supplied CAs.","type":"boolean","default":true,"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.tls_settings.reject_unauthorized","typeLabel":"boolean"},"ca_cert":{"description":"Add custom CA certificates to use for TLS verification.","type":"string","uniqueKey":"data.manifest.oneOf.2.tls_settings.ca_cert","typeLabel":"string"}},"title":"CustomTLSSettings","x-fern-type-name":"CustomTLSSettings","uniqueKey":"data.manifest.oneOf.2.tls_settings","typeLabel":"CustomTLSSettings · object"},"enable_all_tools":{"description":"When enabled, all tools from the OpenAPI spec will be available (up to 30 tools). Disable to select specific tools.","type":"boolean","uniqueKey":"data.manifest.oneOf.2.enable_all_tools","typeLabel":"boolean"},"tool_settings":{"description":"The tools to customize from the OpenAPI Server.","type":"array","items":{"description":"OpenAPI MCP Tool Setting","type":"object","required":["method","path","name","description"],"properties":{"method":{"description":"The HTTP method for this endpoint.","type":"string","enum":["get","post","put","patch","delete","head"],"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.tool_settings.items.[INDEX].method","typeLabel":"enum\u003cstring>"},"path":{"description":"The API endpoint path (e.g., /users/{id}).","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.tool_settings.items.[INDEX].path","typeLabel":"string"},"name":{"description":"The unique name of this tool, derived from OpenAPI operationId.","type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.tool_settings.items.[INDEX].name","typeLabel":"string"},"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.tool_settings.items.[INDEX].description","typeLabel":"string"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"data.manifest.oneOf.2.tool_settings.items.[INDEX].annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"data.manifest.oneOf.2.tool_settings.items.[INDEX].annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"data.manifest.oneOf.2.tool_settings.items.[INDEX].annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"OpenAPIMCPToolSetting","x-fern-type-name":"OpenAPIMCPToolSetting","uniqueKey":"data.manifest.oneOf.2.tool_settings.items.[INDEX]","typeLabel":"OpenAPIMCPToolSetting · object"},"uniqueKey":"data.manifest.oneOf.2.tool_settings","typeLabel":"OpenAPIMCPToolSetting · object[]"},"auth_data":{"oneOf":[{"type":"object","title":"MCPServerHeaderAuth","description":"Authenticate using a static key or token sent as a request header. Choose shared vs individual credentials below.","required":["type","headers","auth_level"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"+value=header","type":"string","enum":["header"],"default":"header","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.0.type","typeLabel":"enum\u003cstring>"},"headers":{"description":"Map each header name to its value. For shared, enter the actual value. For individual, use a placeholder that will be filled in by each user (e.g. Bearer {{API_KEY}}).","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.0.headers.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.0.headers","typeLabel":"object"},"auth_level":{"description":"Level at which this authentication will be applied. Values: global (default), per_user","type":"string","enum":["global","per_user"],"default":"global","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.0.auth_level","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.0","typeLabel":"MCPServerHeaderAuth · object"},{"type":"object","title":"MCPServerOAuth2","description":"OAuth2","required":["type","grant_type","provider"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"OAuth2 authentication","type":"string","enum":["oauth2"],"default":"oauth2","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.type","typeLabel":"enum\u003cstring>"},"grant_type":{"description":"The OAuth2 grant type to use for authentication.","type":"string","enum":["authorization_code","client_credentials","token_exchange","id_jag","jwt_bearer"],"default":"authorization_code","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.grant_type","typeLabel":"enum\u003cstring>"},"provider":{"description":"Select the OAuth provider. Provider-specific configuration (e.g. Auth0 organization) is unlocked based on this value.","type":"string","enum":["custom","auth0","okta","microsoft-entra"],"default":"custom","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"use_organization":{"description":"When enabled, organization will be extracted from the inbound token and it will be included as the organization parameter on token endpoint requests.","type":"boolean","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.use_organization","typeLabel":"boolean"},"default_organization":{"description":"Fallback Auth0 organization when the inbound token does not include organization.","type":"string","pattern":"^\\S+$","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.default_organization","typeLabel":"string"},"audience":{"description":"Okta target audience (RFC 8693 'audience'). Required when the token_exchange grant type is used with the okta provider.","type":"string","pattern":"^\\S+$","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.audience","typeLabel":"string"},"issuer_uri":{"description":"Issuer URI of the authorization server the ID-JAG token is issued for. Sent as the 'audience' parameter on the ID-JAG token exchange.","type":"string","pattern":"^\\S+$","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.issuer_uri","typeLabel":"string"},"authorization_url":{"description":"URL for the authorization request","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.authorization_url","typeLabel":"string"},"token_url":{"description":"The endpoint to exchange auth code for tokens.","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.token_url","typeLabel":"string"},"client_id":{"description":"client ID for OAuth2 or the TrueFoundry secret FQN containing the client ID.","type":"string","pattern":"^\\S+$","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.client_id","typeLabel":"string"},"client_authentication":{"description":"How the OAuth client authenticates to the token endpoint. Certificate auth is available for Microsoft Entra client_credentials and jwt_bearer (on-behalf-of).","type":"string","enum":["client_secret","certificate"],"default":"client_secret","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.client_authentication","typeLabel":"enum\u003cstring>"},"client_secret":{"description":"Client secret or the TrueFoundry secret FQN containing the client secret for OAuth2.","type":"string","minLength":1,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.client_secret","typeLabel":"string"},"certificate_thumbprint":{"description":"Hex SHA-1 thumbprint from the Azure portal, or the TrueFoundry secret FQN containing it.","type":"string","pattern":"^\\S+$","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.certificate_thumbprint","typeLabel":"string"},"private_key":{"description":"PEM private key for Microsoft Entra certificate-based client authentication, or the TrueFoundry secret FQN containing it.","type":"string","minLength":1,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.private_key","typeLabel":"string"},"registration_url":{"description":"URL for dynamic client registration (RFC 7591). If provided, client credentials will be obtained automatically using the Dynamic Client Registration (DCR) process.","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.registration_url","typeLabel":"string"},"introspection_url":{"description":"URL to fetch token expiry (RFC 7662) when the provider does not return expires_in (e.g. Salesforce). Requires client_id and client_secret.","type":"string","pattern":"^https:\\/\\/(([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63})(:[0-9]{1,5})?(\\/[^\\s]*)?$","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.introspection_url","typeLabel":"string"},"include_resource":{"description":"When enabled, the MCP server URL is sent as the resource parameter (RFC 8707) on both authorization and token endpoint requests.","type":"boolean","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.include_resource","typeLabel":"boolean"},"code_challenge_methods_supported":{"description":"List of supported PKCE code challenge methods (S256 only)","type":"array","items":{"type":"string","enum":["S256"],"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.code_challenge_methods_supported.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.code_challenge_methods_supported","typeLabel":"enum\u003cstring>[]"},"jwt_source":{"description":"Source of the JWT token to be used for verification.","type":"string","enum":["access_token","id_token"],"default":"access_token","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.jwt_source","typeLabel":"enum\u003cstring>"},"scopes":{"description":"List of scopes to request from the OAuth2 provider.","type":"array","items":{"type":"string","minLength":1,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.scopes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.scopes","typeLabel":"string[]"},"additional_token_params":{"description":"Extra key/value pairs sent on every token endpoint request (e.g. Auth0 'organization').","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.additional_token_params.additionalProperties","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1.additional_token_params","typeLabel":"object"}},"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.1","typeLabel":"MCPServerOAuth2 · object"},{"type":"object","title":"MCPServerPassthrough","description":"Authenticate using your existing TrueFoundry account (PAT or Virtual Accounts). Your credentials are automatically passed to the MCP server.","required":["type"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"+value=passthrough","type":"string","enum":["passthrough"],"default":"passthrough","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.2.type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.2","typeLabel":"MCPServerPassthrough · object"},{"type":"object","title":"MCPServerAwsSigV4Auth","description":"Sign requests to AWS Bedrock AgentCore with AWS credentials (SigV4).","required":["type","region","auth"],"x-fern-type-name":"MCPServerAuth","properties":{"type":{"description":"+value=aws-sigv4","type":"string","enum":["aws-sigv4"],"default":"aws-sigv4","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.3.type","typeLabel":"enum\u003cstring>"},"region":{"type":"string","enum":["af-south-1","ap-east-1","ap-northeast-1","ap-northeast-2","ap-northeast-3","ap-south-1","ap-south-2","ap-southeast-1","ap-southeast-2","ap-southeast-3","ap-southeast-4","ap-southeast-5","ap-southeast-7","ca-central-1","ca-west-1","cn-north-1","cn-northwest-1","eu-central-1","eu-central-2","eu-north-1","eu-south-1","eu-south-2","eu-west-1","eu-west-2","eu-west-3","il-central-1","me-central-1","me-south-1","mx-central-1","sa-east-1","us-east-1","us-east-2","us-gov-east-1","us-gov-west-1","us-west-1","us-west-2","ap-southeast-6","ap-east-2"],"title":"AWSRegion","x-fern-type-name":"AWSRegion","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.3.region","typeLabel":"enum\u003cstring>"},"auth":{"oneOf":[{"type":"object","title":"MCPServerAwsAccessKeyAuth","description":"Authenticate with an AWS access key pair.","required":["type","access_key_id","secret_access_key"],"x-fern-type-name":"MCPServerAwsAccessKeyAuth","properties":{"type":{"description":"+value=aws-access-key","type":"string","enum":["aws-access-key"],"default":"aws-access-key","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.0.type","typeLabel":"enum\u003cstring>"},"access_key_id":{"description":"AWS access key ID. Prefer a tfy-secret reference.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.0.access_key_id","typeLabel":"string"},"secret_access_key":{"description":"AWS secret access key. Prefer a tfy-secret reference.","type":"string","pattern":"^\\S+$","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.0.secret_access_key","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.0","typeLabel":"MCPServerAwsAccessKeyAuth · object"},{"type":"object","title":"MCPServerAwsAssumeRoleAuth","description":"Authenticate by assuming an IAM role (SigV4).","required":["type","assumed_role_arn"],"x-fern-type-name":"MCPServerAwsAssumeRoleAuth","properties":{"type":{"description":"+value=aws-assumed-role","type":"string","enum":["aws-assumed-role"],"default":"aws-assumed-role","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.1.type","typeLabel":"enum\u003cstring>"},"assumed_role_arn":{"description":"ARN of the role you want to assume. Prefer a tfy-secret reference.","type":"string","pattern":"^(arn:(aws|aws-us-gov|aws-cn):iam::[0-9]{12}:role(/[\\w+=,.@-]+)+|tfy-secret:\\/\\/.+:.+:.+)$","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.1.assumed_role_arn","typeLabel":"string"},"external_id":{"description":"Optional external ID to use when assuming the role. This provides an added layer of security by ensuring only parties with the correct external ID can assume the role.","type":"string","uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.1.external_id","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.3.auth.oneOf.1","typeLabel":"MCPServerAwsAssumeRoleAuth · object"}],"isRequired":true,"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.3.auth","typeLabel":"MCPServerAwsAccessKeyAuth · object | MCPServerAwsAssumeRoleAuth · object"}},"uniqueKey":"data.manifest.oneOf.2.auth_data.oneOf.3","typeLabel":"MCPServerAwsSigV4Auth · object"}],"uniqueKey":"data.manifest.oneOf.2.auth_data","typeLabel":"MCPServerHeaderAuth · object | MCPServerOAuth2 · object | MCPServerPassthrough · object | MCPServerAwsSigV4Auth · object"},"collaborators":{"description":"Users and Teams that have access to this OpenAPI Server","type":"array","items":{"type":"object","required":["subject","role_id"],"properties":{"subject":{"description":"Fully Qualified Name of the subject. eg: user:email or team:teamname","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.collaborators.items.[INDEX].subject","typeLabel":"string"},"role_id":{"description":"Role ID for the resource","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.collaborators.items.[INDEX].role_id","typeLabel":"string"}},"title":"Collaborator","x-fern-type-name":"Collaborator","uniqueKey":"data.manifest.oneOf.2.collaborators.items.[INDEX]","typeLabel":"Collaborator · object"},"uniqueKey":"data.manifest.oneOf.2.collaborators","typeLabel":"Collaborator · object[]"},"ownedBy":{"description":"Names of the owners that own this resource","type":"object","required":["account"],"properties":{"account":{"description":"The name of the account that owns this resource","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.2.ownedBy.account","typeLabel":"string"}},"title":"OwnedBy","x-fern-type-name":"OwnedBy","uniqueKey":"data.manifest.oneOf.2.ownedBy","typeLabel":"OwnedBy · object"},"additional_headers":{"description":"Additional HTTP headers sent on each request to the upstream OpenAPI server. If the same header is set in both `additional_headers` and `auth_data`, the `auth_data` value wins.","type":"object","uniqueKey":"data.manifest.oneOf.2.additional_headers","typeLabel":"object"},"forwarded_headers":{"description":"Extra header names copied from the client request to the upstream OpenAPI server. Content-Type, Accept, Last-Event-ID, and every header starting with mcp- (Mcp-Session-Id, Mcp-Protocol-Version, Mcp-Param-*) are already forwarded automatically.","type":"array","items":{"type":"string","pattern":"^[!#$%\u0026'+\\-.^_`|~0-9A-Za-z]+$","uniqueKey":"data.manifest.oneOf.2.forwarded_headers.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.2.forwarded_headers","typeLabel":"string[]"},"tags":{"description":"Key-value pairs to categorize this OpenAPI MCP Server (e.g., by owner or environment).","type":"object","uniqueKey":"data.manifest.oneOf.2.tags","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data.manifest.oneOf.2","typeLabel":"OpenAPIMCPServerManifest · object"},{"type":"object","title":"StdioMCPServerManifest","description":"User-supplied MCP server configuration. Sensitive fields inside `auth_data` (and other manifest secrets) are redacted for callers who do not have `MANAGE_MCP_SERVER` permission on this server.","required":["name","description","type","command"],"x-fern-type-name":"MCPServerManifest","properties":{"name":{"description":"The name of the MCP Server.","type":"string","pattern":"^[a-z][a-z0-9\\-]{1,71}[a-z0-9]$","isRequired":true,"uniqueKey":"data.manifest.oneOf.3.name","typeLabel":"string"},"description":{"description":"Provide a brief description of the purpose of this MCP Server.","type":"string","minLength":1,"maxLength":1000,"isRequired":true,"uniqueKey":"data.manifest.oneOf.3.description","typeLabel":"string"},"type":{"description":"+value=mcp-server/stdio\n+sort=400","type":"string","enum":["mcp-server/stdio"],"default":"mcp-server/stdio","isRequired":true,"uniqueKey":"data.manifest.oneOf.3.type","typeLabel":"enum\u003cstring>"},"command":{"description":"Executable to run for the stdio MCP server process.","type":"string","minLength":1,"default":"npx","isRequired":true,"uniqueKey":"data.manifest.oneOf.3.command","typeLabel":"string"},"display_name":{"description":"A human-readable label for the MCP Server in the UI. If omitted, the server name is shown.","type":"string","minLength":1,"maxLength":128,"uniqueKey":"data.manifest.oneOf.3.display_name","typeLabel":"string"},"collaborators":{"description":"Users and Teams that have access to this MCP Server","type":"array","items":{"type":"object","required":["subject","role_id"],"properties":{"subject":{"description":"Fully Qualified Name of the subject. eg: user:email or team:teamname","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.3.collaborators.items.[INDEX].subject","typeLabel":"string"},"role_id":{"description":"Role ID for the resource","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.3.collaborators.items.[INDEX].role_id","typeLabel":"string"}},"title":"Collaborator","x-fern-type-name":"Collaborator","uniqueKey":"data.manifest.oneOf.3.collaborators.items.[INDEX]","typeLabel":"Collaborator · object"},"uniqueKey":"data.manifest.oneOf.3.collaborators","typeLabel":"Collaborator · object[]"},"args":{"description":"Arguments passed to the stdio MCP server command.","type":"array","items":{"type":"string","uniqueKey":"data.manifest.oneOf.3.args.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.3.args","typeLabel":"string[]"},"tool_settings":{"description":"Customize tool descriptions or enable/disable specific tools from the MCP Server.","type":"array","items":{"description":"MCP Tool Setting","type":"object","required":["name"],"properties":{"name":{"description":"The unique name of the tool.","type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","isRequired":true,"uniqueKey":"data.manifest.oneOf.3.tool_settings.items.[INDEX].name","typeLabel":"string"},"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"uniqueKey":"data.manifest.oneOf.3.tool_settings.items.[INDEX].description","typeLabel":"string"},"disabled":{"description":"Allows to disable the tool.","type":"boolean","uniqueKey":"data.manifest.oneOf.3.tool_settings.items.[INDEX].disabled","typeLabel":"boolean"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"data.manifest.oneOf.3.tool_settings.items.[INDEX].annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"data.manifest.oneOf.3.tool_settings.items.[INDEX].annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"data.manifest.oneOf.3.tool_settings.items.[INDEX].annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"MCPToolSetting","x-fern-type-name":"MCPToolSetting","uniqueKey":"data.manifest.oneOf.3.tool_settings.items.[INDEX]","typeLabel":"MCPToolSetting · object"},"uniqueKey":"data.manifest.oneOf.3.tool_settings","typeLabel":"MCPToolSetting · object[]"},"tool_policy":{"description":"Enable/disable policy for MCP tools.","type":"object","required":["enable_tools_by_default"],"properties":{"enable_tools_by_default":{"description":"When true, all tools are exposed except those in disabled_tools. When false, only tools listed in enabled_tools are exposed.","type":"boolean","enum":[true,false],"default":true,"isRequired":true,"uniqueKey":"data.manifest.oneOf.3.tool_policy.enable_tools_by_default","typeLabel":"enum\u003cboolean>"},"disabled_tools":{"description":"Tool names to disable when enable_tools_by_default is true.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","uniqueKey":"data.manifest.oneOf.3.tool_policy.disabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.3.tool_policy.disabled_tools","typeLabel":"string[]"},"enabled_tools":{"description":"Tool names to enable when enable_tools_by_default is false.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","uniqueKey":"data.manifest.oneOf.3.tool_policy.enabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.3.tool_policy.enabled_tools","typeLabel":"string[]"}},"title":"MCPToolPolicy","x-fern-type-name":"MCPToolPolicy","uniqueKey":"data.manifest.oneOf.3.tool_policy","typeLabel":"MCPToolPolicy · object"},"tool_metadata":{"description":"Per-tool description and annotation overrides keyed by tool name.","type":"object","additionalProperties":{"description":"Description and annotation overrides for a single MCP tool.","type":"object","properties":{"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"uniqueKey":"data.manifest.oneOf.3.tool_metadata.additionalProperties.description","typeLabel":"string"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"data.manifest.oneOf.3.tool_metadata.additionalProperties.annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"data.manifest.oneOf.3.tool_metadata.additionalProperties.annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"data.manifest.oneOf.3.tool_metadata.additionalProperties.annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"MCPToolMetadata","x-fern-type-name":"MCPToolMetadata","uniqueKey":"data.manifest.oneOf.3.tool_metadata.additionalProperties","typeLabel":"MCPToolMetadata · object"},"uniqueKey":"data.manifest.oneOf.3.tool_metadata","typeLabel":"object"},"auth_data":{"description":"Environment variable authentication for stdio MCP. For individual credentials, use one or more {{placeholder}} names in values (same rules as header auth).","type":"object","required":["type","env"],"properties":{"type":{"description":"+value=env","type":"string","enum":["env"],"default":"env","isRequired":true,"uniqueKey":"data.manifest.oneOf.3.auth_data.type","typeLabel":"enum\u003cstring>"},"env":{"description":"Map each env variable to its value. For shared, enter the actual value. For individual, use a placeholder that will be filled in by each user (e.g. API_KEY {{API_KEY}}).","type":"object","additionalProperties":{"type":"string","uniqueKey":"data.manifest.oneOf.3.auth_data.env.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"data.manifest.oneOf.3.auth_data.env","typeLabel":"object"},"auth_level":{"description":"Level at which this authentication will be applied. Values: global (default), per_user","type":"string","enum":["global","per_user"],"default":"global","uniqueKey":"data.manifest.oneOf.3.auth_data.auth_level","typeLabel":"enum\u003cstring>"}},"title":"MCPServerEnvAuth","x-fern-type-name":"MCPServerEnvAuth","uniqueKey":"data.manifest.oneOf.3.auth_data","typeLabel":"MCPServerEnvAuth · object"},"ownedBy":{"description":"Names of the owners that own this resource","type":"object","required":["account"],"properties":{"account":{"description":"The name of the account that owns this resource","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.3.ownedBy.account","typeLabel":"string"}},"title":"OwnedBy","x-fern-type-name":"OwnedBy","uniqueKey":"data.manifest.oneOf.3.ownedBy","typeLabel":"OwnedBy · object"},"tags":{"description":"Key-value pairs to categorize this MCP Server (e.g., by owner or environment).","type":"object","uniqueKey":"data.manifest.oneOf.3.tags","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data.manifest.oneOf.3","typeLabel":"StdioMCPServerManifest · object"},{"type":"object","title":"TfyManagedMCPServerManifest","description":"User-supplied MCP server configuration. Sensitive fields inside `auth_data` (and other manifest secrets) are redacted for callers who do not have `MANAGE_MCP_SERVER` permission on this server.","required":["type","name","description","server_identifier"],"x-fern-type-name":"MCPServerManifest","properties":{"type":{"description":"+value=mcp-server/tfy-managed","type":"string","enum":["mcp-server/tfy-managed"],"default":"mcp-server/tfy-managed","isRequired":true,"uniqueKey":"data.manifest.oneOf.4.type","typeLabel":"enum\u003cstring>"},"name":{"description":"The name of the MCP Server.","type":"string","pattern":"^[a-z][a-z0-9\\-]{1,71}[a-z0-9]$","isRequired":true,"uniqueKey":"data.manifest.oneOf.4.name","typeLabel":"string"},"description":{"description":"Provide a brief description of the purpose of this MCP Server.","type":"string","minLength":1,"maxLength":1000,"isRequired":true,"uniqueKey":"data.manifest.oneOf.4.description","typeLabel":"string"},"server_identifier":{"description":"Catalog slug of the TrueFoundry-managed MCP server to connect to. Used to resolve the hosted endpoint and available tools.","type":"string","pattern":"^[a-z][a-z0-9\\-]{1,71}[a-z0-9]$","isRequired":true,"uniqueKey":"data.manifest.oneOf.4.server_identifier","typeLabel":"string"},"display_name":{"description":"A human-readable label for the MCP Server in the UI. If omitted, the server name is shown.","type":"string","minLength":1,"maxLength":128,"uniqueKey":"data.manifest.oneOf.4.display_name","typeLabel":"string"},"tool_settings":{"description":"Customize tool descriptions or enable/disable specific tools from the MCP Server.","type":"array","items":{"description":"MCP Tool Setting","type":"object","required":["name"],"properties":{"name":{"description":"The unique name of the tool.","type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","isRequired":true,"uniqueKey":"data.manifest.oneOf.4.tool_settings.items.[INDEX].name","typeLabel":"string"},"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"uniqueKey":"data.manifest.oneOf.4.tool_settings.items.[INDEX].description","typeLabel":"string"},"disabled":{"description":"Allows to disable the tool.","type":"boolean","uniqueKey":"data.manifest.oneOf.4.tool_settings.items.[INDEX].disabled","typeLabel":"boolean"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"data.manifest.oneOf.4.tool_settings.items.[INDEX].annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"data.manifest.oneOf.4.tool_settings.items.[INDEX].annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"data.manifest.oneOf.4.tool_settings.items.[INDEX].annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"MCPToolSetting","x-fern-type-name":"MCPToolSetting","uniqueKey":"data.manifest.oneOf.4.tool_settings.items.[INDEX]","typeLabel":"MCPToolSetting · object"},"uniqueKey":"data.manifest.oneOf.4.tool_settings","typeLabel":"MCPToolSetting · object[]"},"tool_policy":{"description":"Enable/disable policy for MCP tools.","type":"object","required":["enable_tools_by_default"],"properties":{"enable_tools_by_default":{"description":"When true, all tools are exposed except those in disabled_tools. When false, only tools listed in enabled_tools are exposed.","type":"boolean","enum":[true,false],"default":true,"isRequired":true,"uniqueKey":"data.manifest.oneOf.4.tool_policy.enable_tools_by_default","typeLabel":"enum\u003cboolean>"},"disabled_tools":{"description":"Tool names to disable when enable_tools_by_default is true.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","uniqueKey":"data.manifest.oneOf.4.tool_policy.disabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.4.tool_policy.disabled_tools","typeLabel":"string[]"},"enabled_tools":{"description":"Tool names to enable when enable_tools_by_default is false.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$","uniqueKey":"data.manifest.oneOf.4.tool_policy.enabled_tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.manifest.oneOf.4.tool_policy.enabled_tools","typeLabel":"string[]"}},"title":"MCPToolPolicy","x-fern-type-name":"MCPToolPolicy","uniqueKey":"data.manifest.oneOf.4.tool_policy","typeLabel":"MCPToolPolicy · object"},"tool_metadata":{"description":"Per-tool description and annotation overrides keyed by tool name.","type":"object","additionalProperties":{"description":"Description and annotation overrides for a single MCP tool.","type":"object","properties":{"description":{"description":"Describe what this tool does. This helps AI models understand when to use it.","type":"string","minLength":1,"maxLength":20000,"uniqueKey":"data.manifest.oneOf.4.tool_metadata.additionalProperties.description","typeLabel":"string"},"annotations":{"description":"MCP Tool Annotations","type":"object","properties":{"readOnlyHint":{"description":"Indicates the tool only reads data and does not modify anything.","type":"boolean","uniqueKey":"data.manifest.oneOf.4.tool_metadata.additionalProperties.annotations.readOnlyHint","typeLabel":"boolean"},"destructiveHint":{"description":"Indicates the tool may perform destructive updates.","type":"boolean","uniqueKey":"data.manifest.oneOf.4.tool_metadata.additionalProperties.annotations.destructiveHint","typeLabel":"boolean"}},"title":"MCPToolAnnotations","x-fern-type-name":"MCPToolAnnotations","uniqueKey":"data.manifest.oneOf.4.tool_metadata.additionalProperties.annotations","typeLabel":"MCPToolAnnotations · object"}},"title":"MCPToolMetadata","x-fern-type-name":"MCPToolMetadata","uniqueKey":"data.manifest.oneOf.4.tool_metadata.additionalProperties","typeLabel":"MCPToolMetadata · object"},"uniqueKey":"data.manifest.oneOf.4.tool_metadata","typeLabel":"object"},"collaborators":{"description":"Users and Teams that have access to this MCP Server","type":"array","items":{"type":"object","required":["subject","role_id"],"properties":{"subject":{"description":"Fully Qualified Name of the subject. eg: user:email or team:teamname","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.4.collaborators.items.[INDEX].subject","typeLabel":"string"},"role_id":{"description":"Role ID for the resource","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.4.collaborators.items.[INDEX].role_id","typeLabel":"string"}},"title":"Collaborator","x-fern-type-name":"Collaborator","uniqueKey":"data.manifest.oneOf.4.collaborators.items.[INDEX]","typeLabel":"Collaborator · object"},"uniqueKey":"data.manifest.oneOf.4.collaborators","typeLabel":"Collaborator · object[]"},"ownedBy":{"description":"Names of the owners that own this resource","type":"object","required":["account"],"properties":{"account":{"description":"The name of the account that owns this resource","type":"string","isRequired":true,"uniqueKey":"data.manifest.oneOf.4.ownedBy.account","typeLabel":"string"}},"title":"OwnedBy","x-fern-type-name":"OwnedBy","uniqueKey":"data.manifest.oneOf.4.ownedBy","typeLabel":"OwnedBy · object"},"auth_data":{"description":"TfyManaged OAuth2","type":"object","required":["type","grant_type"],"properties":{"type":{"description":"OAuth2 authentication","type":"string","enum":["oauth2"],"default":"oauth2","isRequired":true,"uniqueKey":"data.manifest.oneOf.4.auth_data.type","typeLabel":"enum\u003cstring>"},"grant_type":{"description":"The OAuth2 grant type to use for authentication.","type":"string","enum":["authorization_code"],"isRequired":true,"uniqueKey":"data.manifest.oneOf.4.auth_data.grant_type","typeLabel":"enum\u003cstring>"}},"title":"TfyManagedMCPServerOAuth","x-fern-type-name":"TfyManagedMCPServerOAuth","uniqueKey":"data.manifest.oneOf.4.auth_data","typeLabel":"TfyManagedMCPServerOAuth · object"},"tags":{"description":"Key-value pairs to categorize this MCP Server (e.g., by owner or environment).","type":"object","uniqueKey":"data.manifest.oneOf.4.tags","typeLabel":"object"}},"isRequired":true,"uniqueKey":"data.manifest.oneOf.4","typeLabel":"TfyManagedMCPServerManifest · object"}],"isRequired":true,"uniqueKey":"data.manifest","typeLabel":"RemoteMCPServerManifest · object | VirtualMCPServerManifest · object | OpenAPIMCPServerManifest · object | StdioMCPServerManifest · object | TfyManagedMCPServerManifest · object"},"createdBySubject":{"type":"object","title":"Subject","description":"Principal (user or service account) that originally created this MCP server.","required":["subjectId","subjectType"],"x-fern-type-name":"Subject","properties":{"subjectId":{"type":"string","description":"Subject ID","isRequired":true,"uniqueKey":"data.createdBySubject.subjectId","typeLabel":"string"},"subjectType":{"type":"string","description":"Subject type","enum":["user","team","serviceaccount","virtualaccount","agent-identity","agent","agent-channel-identity","role"],"isRequired":true,"uniqueKey":"data.createdBySubject.subjectType","typeLabel":"enum\u003cstring>"},"subjectSlug":{"oneOf":[{"type":"string","description":"Subject slug","uniqueKey":"data.createdBySubject.subjectSlug.oneOf.0","typeLabel":"string"},{"type":"null","description":"Subject slug","uniqueKey":"data.createdBySubject.subjectSlug.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdBySubject.subjectSlug","typeLabel":"string | null"},"subjectDisplayName":{"oneOf":[{"type":"string","description":"Subject display name","uniqueKey":"data.createdBySubject.subjectDisplayName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Subject display name","uniqueKey":"data.createdBySubject.subjectDisplayName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdBySubject.subjectDisplayName","typeLabel":"string | null"},"subjectPatName":{"oneOf":[{"type":"string","description":"Subject PAT name","uniqueKey":"data.createdBySubject.subjectPatName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Subject PAT name","uniqueKey":"data.createdBySubject.subjectPatName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdBySubject.subjectPatName","typeLabel":"string | null"},"subjectControllerName":{"oneOf":[{"type":"string","uniqueKey":"data.createdBySubject.subjectControllerName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.createdBySubject.subjectControllerName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdBySubject.subjectControllerName","typeLabel":"string | null"},"subjectExternalIdentitySlug":{"oneOf":[{"type":"string","description":"External identity slug (external_identity_id:sub:email)","uniqueKey":"data.createdBySubject.subjectExternalIdentitySlug.oneOf.0","typeLabel":"string"},{"type":"null","description":"External identity slug (external_identity_id:sub:email)","uniqueKey":"data.createdBySubject.subjectExternalIdentitySlug.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdBySubject.subjectExternalIdentitySlug","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.createdBySubject","typeLabel":"Subject · object"},"id":{"oneOf":[{"type":"string","description":"Identifier for this MCP server.","uniqueKey":"data.id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Identifier for this MCP server.","uniqueKey":"data.id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.id","typeLabel":"string | null"},"createdAt":{"oneOf":[{"format":"date-time","type":"string","description":"MCP server creation timestamp.","uniqueKey":"data.createdAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","description":"MCP server creation timestamp.","uniqueKey":"data.createdAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.createdAt","typeLabel":"string\u003cdate-time> | null"},"updatedAt":{"oneOf":[{"format":"date-time","type":"string","description":"MCP server last-update timestamp.","uniqueKey":"data.updatedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","description":"MCP server last-update timestamp.","uniqueKey":"data.updatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.updatedAt","typeLabel":"string\u003cdate-time> | null"},"proxyUrl":{"oneOf":[{"type":"string","description":"Proxy URL template for accessing the MCP server. Contains a `{{mcpProxyBaseURL}}` placeholder that callers must substitute with the actual gateway base URL before use.","uniqueKey":"data.proxyUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Proxy URL template for accessing the MCP server. Contains a `{{mcpProxyBaseURL}}` placeholder that callers must substitute with the actual gateway base URL before use.","uniqueKey":"data.proxyUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.proxyUrl","typeLabel":"string | null"},"isAuthOverrideSupported":{"oneOf":[{"type":"boolean","description":"Whether the MCP server accepts per-subject auth overrides via `PUT /mcp/{mcpServerId}/auth`.","uniqueKey":"data.isAuthOverrideSupported.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether the MCP server accepts per-subject auth overrides via `PUT /mcp/{mcpServerId}/auth`.","uniqueKey":"data.isAuthOverrideSupported.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.isAuthOverrideSupported","typeLabel":"boolean | null"},"authStatus":{"oneOf":[{"type":"object","title":"MCPServerAuthStatusAuthenticated","description":"Caller's stored per-subject auth status for this MCP server, present on list responses. Same shape as `GET /mcp/{mcpServerId}/auth/status`, without refreshing expired tokens.","required":["status"],"x-fern-type-name":"MCPServerAuthStatusAuthenticated","properties":{"status":{"type":"string","enum":["authenticated","authentication_required","authentication_not_required"],"isRequired":true,"uniqueKey":"data.authStatus.oneOf.0.status","typeLabel":"enum\u003cstring>"},"method":{"oneOf":[{"type":"string","enum":["oauth","auth-override"],"description":"Authentication source that satisfied this status.","uniqueKey":"data.authStatus.oneOf.0.method.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["oauth","auth-override"],"description":"Authentication source that satisfied this status.","uniqueKey":"data.authStatus.oneOf.0.method.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.authStatus.oneOf.0.method","typeLabel":"enum\u003cstring> | null"},"expiresAt":{"oneOf":[{"type":"string","description":"When the access token expires (ISO 8601 UTC). Only for OAuth2 credentials.","example":"2026-10-01T12:40:00.000Z","uniqueKey":"data.authStatus.oneOf.0.expiresAt.oneOf.0","typeLabel":"string"},{"type":"null","description":"When the access token expires (ISO 8601 UTC). Only for OAuth2 credentials.","example":"2026-10-01T12:40:00.000Z","uniqueKey":"data.authStatus.oneOf.0.expiresAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.authStatus.oneOf.0.expiresAt","typeLabel":"string | null"},"isRefreshable":{"oneOf":[{"type":"boolean","description":"Whether a new access token can be obtained without the user re-authorizing. Only for OAuth2 credentials.","example":true,"uniqueKey":"data.authStatus.oneOf.0.isRefreshable.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether a new access token can be obtained without the user re-authorizing. Only for OAuth2 credentials.","example":true,"uniqueKey":"data.authStatus.oneOf.0.isRefreshable.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.authStatus.oneOf.0.isRefreshable","typeLabel":"boolean | null"},"lastUpdatedAt":{"oneOf":[{"type":"string","description":"When the stored OAuth2 credential was last written (ISO 8601 UTC).","example":"2026-10-01T11:40:00.000Z","uniqueKey":"data.authStatus.oneOf.0.lastUpdatedAt.oneOf.0","typeLabel":"string"},{"type":"null","description":"When the stored OAuth2 credential was last written (ISO 8601 UTC).","example":"2026-10-01T11:40:00.000Z","uniqueKey":"data.authStatus.oneOf.0.lastUpdatedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.authStatus.oneOf.0.lastUpdatedAt","typeLabel":"string | null"},"refreshFailureCount":{"oneOf":[{"type":"number","description":"Consecutive background token refresh failures; 0 when none. Only for OAuth2 credentials.","example":0,"uniqueKey":"data.authStatus.oneOf.0.refreshFailureCount.oneOf.0","typeLabel":"number"},{"type":"null","description":"Consecutive background token refresh failures; 0 when none. Only for OAuth2 credentials.","example":0,"uniqueKey":"data.authStatus.oneOf.0.refreshFailureCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.authStatus.oneOf.0.refreshFailureCount","typeLabel":"number | null"},"refreshFailureMessage":{"oneOf":[{"type":"string","description":"Provider error from the most recent background token refresh failure. Only for OAuth2 credentials.","example":"invalid_grant: refresh token expired","uniqueKey":"data.authStatus.oneOf.0.refreshFailureMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"Provider error from the most recent background token refresh failure. Only for OAuth2 credentials.","example":"invalid_grant: refresh token expired","uniqueKey":"data.authStatus.oneOf.0.refreshFailureMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.authStatus.oneOf.0.refreshFailureMessage","typeLabel":"string | null"}},"uniqueKey":"data.authStatus.oneOf.0","typeLabel":"MCPServerAuthStatusAuthenticated · object"},{"type":"object","title":"MCPServerAuthStatusAuthRequired","description":"Caller's stored per-subject auth status for this MCP server, present on list responses. Same shape as `GET /mcp/{mcpServerId}/auth/status`, without refreshing expired tokens.","required":["status"],"x-fern-type-name":"MCPServerAuthStatusAuthRequired","properties":{"status":{"type":"string","enum":["authenticated","authentication_required","authentication_not_required"],"isRequired":true,"uniqueKey":"data.authStatus.oneOf.1.status","typeLabel":"enum\u003cstring>"},"method":{"oneOf":[{"type":"string","enum":["oauth","auth-override"],"description":"Authentication source that satisfied this status.","uniqueKey":"data.authStatus.oneOf.1.method.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["oauth","auth-override"],"description":"Authentication source that satisfied this status.","uniqueKey":"data.authStatus.oneOf.1.method.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.authStatus.oneOf.1.method","typeLabel":"enum\u003cstring> | null"},"reason":{"oneOf":[{"type":"string","description":"Why the subject has authentication required status (e.g. `refresh_failed`, `invalid_grant`).","example":"User needs to complete the OAuth2 authorization flow.","uniqueKey":"data.authStatus.oneOf.1.reason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Why the subject has authentication required status (e.g. `refresh_failed`, `invalid_grant`).","example":"User needs to complete the OAuth2 authorization flow.","uniqueKey":"data.authStatus.oneOf.1.reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.authStatus.oneOf.1.reason","typeLabel":"string | null"},"refreshFailureCount":{"oneOf":[{"type":"number","description":"Consecutive background token refresh failures. Omitted when no credential is stored.","example":5,"uniqueKey":"data.authStatus.oneOf.1.refreshFailureCount.oneOf.0","typeLabel":"number"},{"type":"null","description":"Consecutive background token refresh failures. Omitted when no credential is stored.","example":5,"uniqueKey":"data.authStatus.oneOf.1.refreshFailureCount.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.authStatus.oneOf.1.refreshFailureCount","typeLabel":"number | null"}},"uniqueKey":"data.authStatus.oneOf.1","typeLabel":"MCPServerAuthStatusAuthRequired · object"},{"type":"object","title":"MCPServerAuthStatusAuthNotRequired","description":"Caller's stored per-subject auth status for this MCP server, present on list responses. Same shape as `GET /mcp/{mcpServerId}/auth/status`, without refreshing expired tokens.","required":["status","reason"],"x-fern-type-name":"MCPServerAuthStatusAuthNotRequired","properties":{"status":{"type":"string","enum":["authenticated","authentication_required","authentication_not_required"],"isRequired":true,"uniqueKey":"data.authStatus.oneOf.2.status","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"Why per-subject auth is not applicable for this server configuration.","example":"This MCP server has no authentication configured.","isRequired":true,"uniqueKey":"data.authStatus.oneOf.2.reason","typeLabel":"string"}},"uniqueKey":"data.authStatus.oneOf.2","typeLabel":"MCPServerAuthStatusAuthNotRequired · object"},{"type":"null","uniqueKey":"data.authStatus.oneOf.3","typeLabel":"null"}],"uniqueKey":"data.authStatus","typeLabel":"MCPServerAuthStatusAuthenticated · object | MCPServerAuthStatusAuthRequired · object | MCPServerAuthStatusAuthNotRequired · object | null"}},"isRequired":true,"uniqueKey":"data","typeLabel":"MCPServerV2 · object"}},"required":["data"],"title":"MCPServerResponse","x-fern-type-name":"MCPServerResponse","uniqueKey":"","typeLabel":"MCPServerResponse · object"},"examples":{"Example":{"title":"Example","value":{"data":{"fqn":"my-tenant:mcp-server:filesystem-tools","tenantName":"\u003cstring>","manifest":{"type":"mcp-server/remote","name":"\u003cstring>","description":"\u003cstring>","url":"\u003cstring>","display_name":"\u003cstring>","tls_settings":{"reject_unauthorized":true,"ca_cert":"\u003cstring>"},"tool_settings":[{"name":"\u003cstring>","description":"\u003cstring>","disabled":true,"annotations":{"readOnlyHint":true,"destructiveHint":true}}],"tool_policy":{"enable_tools_by_default":true,"disabled_tools":["\u003cstring>"],"enabled_tools":["\u003cstring>"]},"tool_metadata":{},"auth_data":{"type":"header","headers":{},"auth_level":"global"},"collaborators":[{"subject":"\u003cstring>","role_id":"\u003cstring>"}],"ownedBy":{"account":"\u003cstring>"},"additional_headers":{},"forwarded_headers":["\u003cstring>"],"tags":{}},"createdBySubject":{"subjectId":"\u003cstring>","subjectType":"user","subjectSlug":"\u003cstring>","subjectDisplayName":"\u003cstring>","subjectPatName":"\u003cstring>","subjectControllerName":"\u003cstring>","subjectExternalIdentitySlug":"\u003cstring>"},"id":"\u003cstring>","createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z","proxyUrl":"\u003cstring>","isAuthOverrideSupported":true,"authStatus":{"status":"authenticated","method":"oauth","expiresAt":"2026-10-01T12:40:00.000Z","isRefreshable":true,"lastUpdatedAt":"2026-10-01T11:40:00.000Z","refreshFailureCount":0,"refreshFailureMessage":"invalid_grant: refresh token expired"}}}}},"exampleType":"generated"}},"exampleType":"generated"},"ae9e925f-4da2-4283-a2bd-0f5e167dcd47":{"description":"Invalid request body.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"d7db0aee-9032-40c4-9f49-e7318829e2d1":{"jwt":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"jwt"}}},"servers":{"420b2084-a24a-46fb-8cda-d10944e1e5a2":{"url":"https://{controlPlaneURL}","variables":{"controlPlaneURL":{"default":"app.truefoundry.com","description":"Control Plane URL"}}}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"jwt"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"jwt","name":"Authorization"}],"title":"jwt"}]},"originalFileLocation":"openapi.json"},"subdomain":"truefoundry","siteName":"TrueFoundry Docs","title":"Create or update an MCP server - TrueFoundry Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-02T11:57:45.296Z","originalFileLocation":"docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Creates a new MCP server (when no server with manifest.name exists in the tenant) or updates the existing one.\">\u003cmeta data-mint-head name=\"application-name\" content=\"TrueFoundry Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create or update an MCP server - TrueFoundry Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"TrueFoundry offers an enterprise-grade AI Gateway combining LLM, MCP, and Agent Gateways—empowering businesses to connect, monitor, and govern agentic AI applications across providers from a unified control plane.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"TrueFoundry Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.truefoundry.com/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://assets.production.truefoundry.com/logo.svg\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create or update an MCP server - TrueFoundry Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"TrueFoundry offers an enterprise-grade AI Gateway combining LLM, MCP, and Agent Gateways—empowering businesses to connect, monitor, and govern agentic AI applications across providers from a unified control plane.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://assets.production.truefoundry.com/logo.svg\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/truefoundry/DMuq4kzeTciVEGUc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"TrueFoundry Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4f46e5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.truefoundry.com/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.truefoundry.com/#organization\",\"name\":\"TrueFoundry Docs\",\"url\":\"https://www.truefoundry.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/truefoundry/e2uUimEwX30qkWxc/logo/light.svg?fit=max\u0026auto=format\u0026n=e2uUimEwX30qkWxc\u0026q=85\u0026s=6068d83664aeda0239bec2422657dd20\"}},{\"@type\":\"WebSite\",\"@id\":\"https://www.truefoundry.com#website\",\"name\":\"TrueFoundry Docs\",\"url\":\"https://www.truefoundry.com\",\"publisher\":{\"@id\":\"https://www.truefoundry.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.truefoundry.com/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server#webpage\",\"url\":\"https://www.truefoundry.com/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server\",\"name\":\"Create or update an MCP server\",\"description\":\"Creates a new MCP server (when no server with manifest.name exists in the tenant) or updates the existing one.\",\"dateModified\":\"2026-11-02T11:57:45.296Z\",\"isPartOf\":{\"@id\":\"https://www.truefoundry.com#website\"},\"breadcrumb\":{\"@id\":\"https://www.truefoundry.com/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.truefoundry.com/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"MCP Servers V2\",\"item\":\"https://www.truefoundry.com/docs/api-reference/mcp-servers-v2/list-mcp-servers\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create or update an MCP server\",\"item\":\"https://www.truefoundry.com/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://www.truefoundry.com/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server#apireference\",\"headline\":\"Create or update an MCP server\",\"name\":\"Create or update an MCP server\",\"description\":\"Creates a new MCP server (when no server with manifest.name exists in the tenant) or updates the existing one.\",\"url\":\"https://www.truefoundry.com/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server\",\"mainEntityOfPage\":{\"@id\":\"https://www.truefoundry.com/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server#webpage\"},\"image\":\"https://assets.production.truefoundry.com/logo.svg\",\"dateModified\":\"2026-11-02T11:57:45.296Z\",\"publisher\":{\"@id\":\"https://www.truefoundry.com/#organization\"},\"isPartOf\":{\"@id\":\"https://www.truefoundry.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"TrueFoundry Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"TrueFoundry Docs","nav":{"global":null,"tabs":[{"tab":"AI Gateway","pages":[{"title":"AI Gateway","href":"/docs/ai-gateway/intro-to-llm-gateway"}]},{"tab":"Agent Platform","pages":[{"title":"Agent Platform","href":"/docs/agent-platform/agent-harness/overview"}]},{"tab":"Platform","pages":[{"title":"Platform","href":"/docs/platform/overview"}]},{"tab":"AI Deployment","pages":[{"title":"AI Deployment","href":"/docs/ai-deployment-overview"}]},{"tab":"API Reference","groups":[{"group":"TrueFoundry SDK","pages":[{"title":"TrueFoundry Python SDK","href":"/docs/truefoundry_sdk"},{"title":"TrueFoundry ML Client","href":"/docs/truefoundry-ml-reference/index"}]},{"group":"TrueFoundry CLI","pages":[{"title":"Using tfy apply","href":"/docs/using-tfy-apply"},{"title":"Using tfy delete","href":"/docs/using-tfy-delete"}]},{"group":"Extras","pages":[{"title":"Add and List Models","href":"/docs/apply-api-create-models"},{"title":"Secret Management API","href":"/docs/apply-api-secret-management"}]},{"group":"Agent","pages":[{"title":"List Agents","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agents","href":"/docs/api-reference/agent/list-agents"},{"title":"Create or Update Agent","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/agents","href":"/docs/api-reference/agent/create-or-update-agent"},{"title":"Get Agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agents/{id}","href":"/docs/api-reference/agent/get-agent"},{"title":"Delete Agent","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/agents/{id}","href":"/docs/api-reference/agent/delete-agent"},{"title":"Get Agent Token","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agents/{id}/token","href":"/docs/api-reference/agent/get-agent-token"},{"title":"Create Agent Token","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/agents/{id}/token","href":"/docs/api-reference/agent/create-agent-token"},{"title":"Update Agent State","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/agents/{id}/state","href":"/docs/api-reference/agent/update-agent-state"},{"title":"List Agent Versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agent-versions","href":"/docs/api-reference/agent/list-agent-versions"}]},{"group":"Agent Skills","pages":[{"title":"Get agent skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agent-skills/{agent_skill_id}","href":"/docs/api-reference/agent-skills/get-agent-skill"},{"title":"Delete agent skill","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/agent-skills/{agent_skill_id}","href":"/docs/api-reference/agent-skills/delete-agent-skill"},{"title":"List agent skills","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agent-skills","href":"/docs/api-reference/agent-skills/list-agent-skills"},{"title":"List agent skill versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agent-skill-versions","href":"/docs/api-reference/agent-skills/list-agent-skill-versions"},{"title":"Create or update agent skill version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/agent-skill-versions","href":"/docs/api-reference/agent-skills/create-or-update-agent-skill-version"},{"title":"Get agent skill version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/agent-skill-versions/{agent_skill_version_id}","href":"/docs/api-reference/agent-skills/get-agent-skill-version"},{"title":"Delete agent skill version","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/agent-skill-versions/{agent_skill_version_id}","href":"/docs/api-reference/agent-skills/delete-agent-skill-version"}]},{"group":"Applications","pages":[{"title":"List Applications","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/apps","href":"/docs/api-reference/applications/list-applications"},{"title":"Create or Update Application Deployment","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/apps","href":"/docs/api-reference/applications/create-or-update-application-deployment"},{"title":"Get Application","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/apps/{id}","href":"/docs/api-reference/applications/get-application"},{"title":"Delete Application","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/apps/{id}","href":"/docs/api-reference/applications/delete-application"},{"title":"List Application Deployments","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/apps/{id}/deployments","href":"/docs/api-reference/applications/list-application-deployments"},{"title":"Redeploy Application","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/apps/{id}/deployments/{deploymentId}/redeploy","href":"/docs/api-reference/applications/redeploy-application"},{"title":"Get Deployment","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/apps/{id}/deployments/{deploymentId}","href":"/docs/api-reference/applications/get-deployment"},{"title":"Pause Application","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/svc/v1/apps/{id}/scale-to-zero","href":"/docs/api-reference/applications/pause-application"},{"title":"Resume Application","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/svc/v1/apps/{id}/scale-to-original","href":"/docs/api-reference/applications/resume-application"},{"title":"Cancel Deployment","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/apps/{id}/deployments/{deploymentId}/cancel","href":"/docs/api-reference/applications/cancel-deployment"},{"title":"Get Application Resources","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/x/apps/{id}/resources","href":"/docs/api-reference/applications/get-application-resources"},{"title":"Get Application State","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/x/apps/{id}/state","href":"/docs/api-reference/applications/get-application-state"}]},{"group":"Metrics","pages":[{"title":"Create Grafana dashboard for an application","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/metrics/grafana/{workspaceId}","href":"/docs/api-reference/metrics/create-grafana-dashboard-for-an-application"},{"title":"Get Grafana dashboard JSON for an application","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/metrics/grafana/dashboard-json/{workspaceId}","href":"/docs/api-reference/metrics/get-grafana-dashboard-json-for-an-application"},{"title":"List metric charts for an application","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/metrics/{workspaceId}/charts","href":"/docs/api-reference/metrics/list-metric-charts-for-an-application"},{"title":"Get metric data for an application chart","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/metrics/{workspaceId}/charts/{chart}","href":"/docs/api-reference/metrics/get-metric-data-for-an-application-chart"},{"title":"List metric charts for a cluster","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/metrics/cluster/{id}/charts","href":"/docs/api-reference/metrics/list-metric-charts-for-a-cluster"},{"title":"Get metric data for a cluster chart","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/metrics/cluster/{id}/charts/{chart}","href":"/docs/api-reference/metrics/get-metric-data-for-a-cluster-chart"}]},{"group":"Apply","pages":[{"title":"Create or update a resource from a manifest","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/apply","href":"/docs/api-reference/apply/create-or-update-a-resource-from-a-manifest"},{"title":"Delete a resource identified by a manifest","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/delete","href":"/docs/api-reference/apply/delete-a-resource-identified-by-a-manifest"},{"title":"Resolve the dependency tree for a set of manifests","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/dependency-tree","href":"/docs/api-reference/apply/resolve-the-dependency-tree-for-a-set-of-manifests"}]},{"group":"Artifacts","pages":[{"title":"Get artifact","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/artifacts/{id}","href":"/docs/api-reference/artifacts/get-artifact"},{"title":"Delete artifact","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/artifacts/{id}","href":"/docs/api-reference/artifacts/delete-artifact"},{"title":"List artifacts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/artifacts","href":"/docs/api-reference/artifacts/list-artifacts"},{"title":"List artifact versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/artifact-versions","href":"/docs/api-reference/artifacts/list-artifact-versions"},{"title":"Create or update artifact version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/artifact-versions","href":"/docs/api-reference/artifacts/create-or-update-artifact-version"},{"title":"Delete artifact version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/artifact-versions","href":"/docs/api-reference/artifacts/delete-artifact-version"},{"title":"Apply tags to artifact version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/artifact-versions/tags","href":"/docs/api-reference/artifacts/apply-tags-to-artifact-version"},{"title":"Get signed URLs for artifact version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/artifact-versions/signed-urls","href":"/docs/api-reference/artifacts/get-signed-urls-for-artifact-version"},{"title":"Create multipart upload","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/artifact-versions/signed-urls/multipart","href":"/docs/api-reference/artifacts/create-multipart-upload"},{"title":"List files in artifact version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/artifact-versions/files","href":"/docs/api-reference/artifacts/list-files-in-artifact-version"},{"title":"Stage artifact version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/artifact-versions/stage","href":"/docs/api-reference/artifacts/stage-artifact-version"},{"title":"Mark stage failure","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/artifact-versions/mark-stage-failure","href":"/docs/api-reference/artifacts/mark-stage-failure"},{"title":"Get artifact version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/artifact-versions/{id}","href":"/docs/api-reference/artifacts/get-artifact-version"},{"title":"Delete artifact version","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/artifact-versions/{id}","href":"/docs/api-reference/artifacts/delete-artifact-version-1"}]},{"group":"Audit Logs","pages":[{"title":"Get Audit Logs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/audit-logs","href":"/docs/api-reference/audit-logs/get-audit-logs"},{"title":"Get Audit Log Actions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/audit-logs/actions","href":"/docs/api-reference/audit-logs/get-audit-log-actions"},{"title":"Get Resource Audit Logs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/audit-logs/resources","href":"/docs/api-reference/audit-logs/get-resource-audit-logs"}]},{"group":"Clusters","pages":[{"title":"List clusters","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/clusters","href":"/docs/api-reference/clusters/list-clusters"},{"title":"Create or update a cluster","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/clusters","href":"/docs/api-reference/clusters/create-or-update-a-cluster"},{"title":"Get a cluster","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/clusters/{id}","href":"/docs/api-reference/clusters/get-a-cluster"},{"title":"Delete a cluster","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/clusters/{id}","href":"/docs/api-reference/clusters/delete-a-cluster"},{"title":"List cluster addons","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/clusters/{id}/get-addons","href":"/docs/api-reference/clusters/list-cluster-addons"},{"title":"Get cluster connection status","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/clusters/{id}/is-connected","href":"/docs/api-reference/clusters/get-cluster-connection-status"}]},{"group":"Jobs","pages":[{"title":"List Job Runs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/jobs/{jobId}/runs","href":"/docs/api-reference/jobs/list-job-runs"},{"title":"Get Job Run","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/jobs/{jobId}/runs/{jobRunName}","href":"/docs/api-reference/jobs/get-job-run"},{"title":"Delete Job Run","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/jobs/{jobId}/runs/{jobRunName}","href":"/docs/api-reference/jobs/delete-job-run"},{"title":"Trigger Job","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/jobs/trigger","href":"/docs/api-reference/jobs/trigger-job"},{"title":"Terminate Job","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/jobs/terminate","href":"/docs/api-reference/jobs/terminate-job"}]},{"group":"LLM Gateway Budgets","pages":[{"title":"List gateway budgets","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/llm-gateway/budgets","href":"/docs/api-reference/llm-gateway-budgets/list-gateway-budgets"},{"title":"Create or update a gateway budget","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/llm-gateway/budgets","href":"/docs/api-reference/llm-gateway-budgets/create-or-update-a-gateway-budget"},{"title":"Get my budget usage","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/llm-gateway/budgets/my-usage","href":"/docs/api-reference/llm-gateway-budgets/get-my-budget-usage"},{"title":"Simulate gateway budgets","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/llm-gateway/budgets/simulate","href":"/docs/api-reference/llm-gateway-budgets/simulate-gateway-budgets"},{"title":"Get a gateway budget by id","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/llm-gateway/budgets/{id}","href":"/docs/api-reference/llm-gateway-budgets/get-a-gateway-budget-by-id"},{"title":"Delete a gateway budget by id","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/llm-gateway/budgets/{id}","href":"/docs/api-reference/llm-gateway-budgets/delete-a-gateway-budget-by-id"},{"title":"Get a gateway budget leaderboard","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/llm-gateway/budgets/{id}/leaderboard","href":"/docs/api-reference/llm-gateway-budgets/get-a-gateway-budget-leaderboard"}]},{"group":"Logs","pages":[{"title":"Get application logs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/logs","href":"/docs/api-reference/logs/get-application-logs"},{"title":"Download workspace logs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/logs/{workspaceId}/download","href":"/docs/api-reference/logs/download-workspace-logs"}]},{"group":"MCP Registry","pages":[{"title":"List MCP registry servers","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/mcp-registry/v0.1/servers","href":"/docs/api-reference/mcp-registry/list-mcp-registry-servers"},{"title":"List MCP registry server versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/mcp-registry/v0.1/servers/{mcpRegistryServerName}/versions","href":"/docs/api-reference/mcp-registry/list-mcp-registry-server-versions"},{"title":"Get an MCP registry server version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/mcp-registry/v0.1/servers/{mcpRegistryServerName}/versions/{version}","href":"/docs/api-reference/mcp-registry/get-an-mcp-registry-server-version"}]},{"group":"MCP Servers V2","pages":[{"title":"List MCP servers","description":"Returns a paginated list of MCP servers in the caller's tenant.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp","href":"/docs/api-reference/mcp-servers-v2/list-mcp-servers"},{"title":"Create or update an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/mcp","href":"/docs/api-reference/mcp-servers-v2/create-or-update-an-mcp-server"},{"title":"Bulk create TrueFoundry-managed MCP servers","description":"Creates multiple TrueFoundry-managed MCP servers. Every manifest must have a different name. Never updates an existing server; each manifest is created independently and failures are reported per name.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/mcp/bulk","href":"/docs/api-reference/mcp-servers-v2/bulk-create-truefoundry-managed-mcp-servers"},{"title":"Get an MCP server by ID","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp/{mcpServerId}","href":"/docs/api-reference/mcp-servers-v2/get-an-mcp-server-by-id"},{"title":"Delete an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/mcp/{mcpServerId}","href":"/docs/api-reference/mcp-servers-v2/delete-an-mcp-server"},{"title":"Get MCP server code snippets","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp/{mcpServerId}/code-snippets","href":"/docs/api-reference/mcp-servers-v2/get-mcp-server-code-snippets"},{"title":"List MCP user auth overrides","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp/{mcpServerId}/auth","href":"/docs/api-reference/mcp-servers-v2/list-mcp-user-auth-overrides"},{"title":"Set a per-subject auth override","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/mcp/{mcpServerId}/auth","href":"/docs/api-reference/mcp-servers-v2/set-a-per-subject-auth-override"},{"title":"Disconnect a subject from an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/mcp/{mcpServerId}/auth","href":"/docs/api-reference/mcp-servers-v2/disconnect-a-subject-from-an-mcp-server"},{"title":"Get the consent URL for per-user MCP server authorization","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp/{mcpServerId}/authorize","href":"/docs/api-reference/mcp-servers-v2/get-the-consent-url-for-per-user-mcp-server-authorization"},{"title":"Get MCP server auth status for a subject","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp/{mcpServerId}/auth/status","href":"/docs/api-reference/mcp-servers-v2/get-mcp-server-auth-status-for-a-subject"},{"title":"Get auth override parameters for an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/mcp/{mcpServerId}/auth-override/uischema","href":"/docs/api-reference/mcp-servers-v2/get-auth-override-parameters-for-an-mcp-server"},{"title":"Revoke all auth tokens on an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/mcp/{mcpServerId}/auth/tokens","href":"/docs/api-reference/mcp-servers-v2/revoke-all-auth-tokens-on-an-mcp-server"}]},{"group":"MLRepos","pages":[{"title":"Get ML Repo","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/ml-repos/{id}","href":"/docs/api-reference/mlrepos/get-ml-repo"},{"title":"Delete ML Repo","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/ml-repos/{id}","href":"/docs/api-reference/mlrepos/delete-ml-repo"},{"title":"List ML Repos","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/ml-repos","href":"/docs/api-reference/mlrepos/list-ml-repos"},{"title":"Create or Update MLRepo","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/ml-repos","href":"/docs/api-reference/mlrepos/create-or-update-mlrepo"}]},{"group":"Models","pages":[{"title":"Get model","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/models/{id}","href":"/docs/api-reference/models/get-model"},{"title":"Delete model","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/models/{id}","href":"/docs/api-reference/models/delete-model"},{"title":"List models","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/models","href":"/docs/api-reference/models/list-models"},{"title":"List model versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/model-versions","href":"/docs/api-reference/models/list-model-versions"},{"title":"Create or update model version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/model-versions","href":"/docs/api-reference/models/create-or-update-model-version"},{"title":"Delete model version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/model-versions","href":"/docs/api-reference/models/delete-model-version"},{"title":"Apply tags to model version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/model-versions/tags","href":"/docs/api-reference/models/apply-tags-to-model-version"},{"title":"Get model version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/model-versions/{id}","href":"/docs/api-reference/models/get-model-version"},{"title":"Delete model version","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/model-versions/{id}","href":"/docs/api-reference/models/delete-model-version-1"}]},{"group":"Personal Access Tokens","pages":[{"title":"List personal access tokens","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/personal-access-tokens","href":"/docs/api-reference/personal-access-tokens/list-personal-access-tokens"},{"title":"Create a personal access token","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/personal-access-tokens","href":"/docs/api-reference/personal-access-tokens/create-a-personal-access-token"},{"title":"Check personal access token exists","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/personal-access-tokens/exists","href":"/docs/api-reference/personal-access-tokens/check-personal-access-token-exists"},{"title":"Create a personal access token for another user","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/personal-access-tokens/for-user","href":"/docs/api-reference/personal-access-tokens/create-a-personal-access-token-for-another-user"},{"title":"Revoke all personal access tokens for a user","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/personal-access-tokens/revoke/all","href":"/docs/api-reference/personal-access-tokens/revoke-all-personal-access-tokens-for-a-user"},{"title":"Delete a personal access token","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/personal-access-tokens/{id}","href":"/docs/api-reference/personal-access-tokens/delete-a-personal-access-token"},{"title":"Get token for a personal access token","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/personal-access-tokens/{name}/token","href":"/docs/api-reference/personal-access-tokens/get-token-for-a-personal-access-token"}]},{"group":"Prompts","pages":[{"title":"Get prompt","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/prompts/{id}","href":"/docs/api-reference/prompts/get-prompt"},{"title":"Delete prompt","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/prompts/{id}","href":"/docs/api-reference/prompts/delete-prompt"},{"title":"List prompts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/prompts","href":"/docs/api-reference/prompts/list-prompts"},{"title":"List prompt versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/prompt-versions","href":"/docs/api-reference/prompts/list-prompt-versions"},{"title":"Create or update prompt version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/prompt-versions","href":"/docs/api-reference/prompts/create-or-update-prompt-version"},{"title":"Delete prompt version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/prompt-versions","href":"/docs/api-reference/prompts/delete-prompt-version"},{"title":"Apply tags to prompt version","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/prompt-versions/tags","href":"/docs/api-reference/prompts/apply-tags-to-prompt-version"},{"title":"Get prompt version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/prompt-versions/{id}","href":"/docs/api-reference/prompts/get-prompt-version"},{"title":"Delete prompt version","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/prompt-versions/{id}","href":"/docs/api-reference/prompts/delete-prompt-version-1"}]},{"group":"Provider Integrations","pages":[{"title":"Summarize model integrations","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/provider-integrations/summary","href":"/docs/api-reference/provider-integrations/summarize-model-integrations"},{"title":"List provider integrations","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/provider-integrations","href":"/docs/api-reference/provider-integrations/list-provider-integrations"}]},{"group":"SCIM v2","pages":[{"title":"List Resource Types","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/ResourceTypes","href":"/docs/api-reference/scim-v2/list-resource-types"},{"title":"List Schemas","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Schemas","href":"/docs/api-reference/scim-v2/list-schemas"},{"title":"Get Schema","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Schemas/{id}","href":"/docs/api-reference/scim-v2/get-schema"},{"title":"Get Service Provider Configuration","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/ServiceProviderConfig","href":"/docs/api-reference/scim-v2/get-service-provider-configuration"},{"title":"List Users","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Users","href":"/docs/api-reference/scim-v2/list-users"},{"title":"Create User","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Users","href":"/docs/api-reference/scim-v2/create-user"},{"title":"Get User","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Users/{id}","href":"/docs/api-reference/scim-v2/get-user"},{"title":"Update User","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Users/{id}","href":"/docs/api-reference/scim-v2/update-user"},{"title":"Delete User","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Users/{id}","href":"/docs/api-reference/scim-v2/delete-user"},{"title":"Update User","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Users/{id}","href":"/docs/api-reference/scim-v2/update-user-1"},{"title":"List Groups","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Groups","href":"/docs/api-reference/scim-v2/list-groups"},{"title":"Create Group","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Groups","href":"/docs/api-reference/scim-v2/create-group"},{"title":"Get Group","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Groups/{id}","href":"/docs/api-reference/scim-v2/get-group"},{"title":"Update Group","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Groups/{id}","href":"/docs/api-reference/scim-v2/update-group"},{"title":"Delete Group","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Groups/{id}","href":"/docs/api-reference/scim-v2/delete-group"},{"title":"Patch Group","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/svc/v1/scim/v2/{tenantName}/{ssoId}/Groups/{id}","href":"/docs/api-reference/scim-v2/patch-group"}]},{"group":"Secret Groups","pages":[{"title":"List secret groups","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/secret-groups","href":"/docs/api-reference/secret-groups/list-secret-groups"},{"title":"Create or update a secret group","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/secret-groups","href":"/docs/api-reference/secret-groups/create-or-update-a-secret-group"},{"title":"Create a secret group","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/secret-groups","href":"/docs/api-reference/secret-groups/create-a-secret-group"},{"title":"Get a secret group","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/secret-groups/{id}","href":"/docs/api-reference/secret-groups/get-a-secret-group"},{"title":"Update secrets in a secret group","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/secret-groups/{id}","href":"/docs/api-reference/secret-groups/update-secrets-in-a-secret-group"},{"title":"Delete a secret group","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/secret-groups/{id}","href":"/docs/api-reference/secret-groups/delete-a-secret-group"}]},{"group":"Secrets","pages":[{"title":"List secrets","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/secrets","href":"/docs/api-reference/secrets/list-secrets"},{"title":"List associated active deployments for multiple secrets","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/secrets/deployments","href":"/docs/api-reference/secrets/list-associated-active-deployments-for-multiple-secrets"},{"title":"Get a secret","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/secrets/{id}","href":"/docs/api-reference/secrets/get-a-secret"},{"title":"Delete a secret","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/secrets/{id}","href":"/docs/api-reference/secrets/delete-a-secret"},{"title":"List active deployments for a secret","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/secrets/{id}/deployments","href":"/docs/api-reference/secrets/list-active-deployments-for-a-secret"}]},{"group":"Teams","pages":[{"title":"List teams","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/teams/user","href":"/docs/api-reference/teams/list-teams"},{"title":"Create or update a team","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/teams","href":"/docs/api-reference/teams/create-or-update-a-team"},{"title":"List team members","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/teams/{id}/members","href":"/docs/api-reference/teams/list-team-members"},{"title":"Add team members","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/teams/{id}/members","href":"/docs/api-reference/teams/add-team-members"},{"title":"Remove team members","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/teams/{id}/members","href":"/docs/api-reference/teams/remove-team-members"},{"title":"List team managers","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/teams/{id}/managers","href":"/docs/api-reference/teams/list-team-managers"},{"title":"Add team managers","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/teams/{id}/managers","href":"/docs/api-reference/teams/add-team-managers"},{"title":"Remove team managers","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/teams/{id}/managers","href":"/docs/api-reference/teams/remove-team-managers"},{"title":"Generate team manifest for YAML","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/teams/{id}/generate-manifest","href":"/docs/api-reference/teams/generate-team-manifest-for-yaml"},{"title":"Get a team","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/teams/{id}","href":"/docs/api-reference/teams/get-a-team"},{"title":"Delete a team","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/teams/{id}","href":"/docs/api-reference/teams/delete-a-team"},{"title":"Get team permissions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/teams/{id}/permissions","href":"/docs/api-reference/teams/get-team-permissions"}]},{"group":"Traces","pages":[{"title":"Get filtered spans data with detailed attributes","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/spans/query","href":"/docs/api-reference/traces/get-filtered-spans-data-with-detailed-attributes"}]},{"group":"Users","pages":[{"title":"List users","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/users","href":"/docs/api-reference/users/list-users"},{"title":"Register a user","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/users/register","href":"/docs/api-reference/users/register-a-user"},{"title":"Get a user","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/users/{id}","href":"/docs/api-reference/users/get-a-user"},{"title":"Delete a user","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/users/{id}","href":"/docs/api-reference/users/delete-a-user"},{"title":"Invite a user","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/users/invite","href":"/docs/api-reference/users/invite-a-user"},{"title":"Resend a user invite","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/x/users/invite/resend","href":"/docs/api-reference/users/resend-a-user-invite"},{"title":"Deactivate a user","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/svc/v1/users/deactivate","href":"/docs/api-reference/users/deactivate-a-user"},{"title":"Revoke all sessions of a user","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/users/revoke-sessions","href":"/docs/api-reference/users/revoke-all-sessions-of-a-user"},{"title":"Activate a user","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/svc/v1/users/activate","href":"/docs/api-reference/users/activate-a-user"},{"title":"Send a password reset email","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/x/users/forgot-password","href":"/docs/api-reference/users/send-a-password-reset-email"},{"title":"Change password","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/users/change-password","href":"/docs/api-reference/users/change-password"},{"title":"Check user registration","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/users/is-registered","href":"/docs/api-reference/users/check-user-registration"}]},{"group":"Virtual Accounts","pages":[{"title":"List virtual accounts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/virtual-accounts","href":"/docs/api-reference/virtual-accounts/list-virtual-accounts"},{"title":"Create or update a virtual account","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/virtual-accounts","href":"/docs/api-reference/virtual-accounts/create-or-update-a-virtual-account"},{"title":"Check virtual account exists","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/virtual-accounts/exists","href":"/docs/api-reference/virtual-accounts/check-virtual-account-exists"},{"title":"Get a virtual account","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/virtual-accounts/{id}","href":"/docs/api-reference/virtual-accounts/get-a-virtual-account"},{"title":"Delete a virtual account","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/virtual-accounts/{id}","href":"/docs/api-reference/virtual-accounts/delete-a-virtual-account"},{"title":"Get token for a virtual account","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/virtual-accounts/{id}/token","href":"/docs/api-reference/virtual-accounts/get-token-for-a-virtual-account"},{"title":"Sync token to secret store","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/virtual-accounts/{id}/sync-to-secret-store","href":"/docs/api-reference/virtual-accounts/sync-token-to-secret-store"},{"title":"Regenerate token for a virtual account","deprecated":null,"version":null,"openapi":"/openapi.json post /api/svc/v1/virtual-accounts/{id}/regenerate-token","href":"/docs/api-reference/virtual-accounts/regenerate-token-for-a-virtual-account"},{"title":"Delete a JWT for a virtual account","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/virtual-accounts/{id}/jwt/{jwtId}","href":"/docs/api-reference/virtual-accounts/delete-a-jwt-for-a-virtual-account"}]},{"group":"Role Bindings","pages":[{"title":"List role bindings","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/role-bindings","href":"/docs/api-reference/role-bindings/list-role-bindings"},{"title":"Create or update a role binding","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/role-bindings","href":"/docs/api-reference/role-bindings/create-or-update-a-role-binding"},{"title":"Generate role-binding manifests for a resource or subject","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/role-bindings/generate-manifest","href":"/docs/api-reference/role-bindings/generate-role-binding-manifests-for-a-resource-or-subject"},{"title":"Check role binding exists","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/role-bindings/exists","href":"/docs/api-reference/role-bindings/check-role-binding-exists"},{"title":"Get a role binding by ID","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/role-bindings/{id}","href":"/docs/api-reference/role-bindings/get-a-role-binding-by-id"},{"title":"Delete a role binding by ID","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/role-bindings/{id}","href":"/docs/api-reference/role-bindings/delete-a-role-binding-by-id"}]},{"group":"Workspaces","pages":[{"title":"List workspaces","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/workspaces","href":"/docs/api-reference/workspaces/list-workspaces"},{"title":"Create or update a workspace","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/workspaces","href":"/docs/api-reference/workspaces/create-or-update-a-workspace"},{"title":"Search workspaces","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/workspaces/search","href":"/docs/api-reference/workspaces/search-workspaces"},{"title":"Get a workspace","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/workspaces/{id}","href":"/docs/api-reference/workspaces/get-a-workspace"},{"title":"Delete a workspace","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/workspaces/{id}","href":"/docs/api-reference/workspaces/delete-a-workspace"}]},{"group":"Provider Accounts","pages":[{"title":"List provider accounts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/provider-accounts","href":"/docs/api-reference/provider-accounts/list-provider-accounts"},{"title":"Create or update a provider account","deprecated":null,"version":null,"openapi":"/openapi.json put /api/svc/v1/provider-accounts","href":"/docs/api-reference/provider-accounts/create-or-update-a-provider-account"},{"title":"Get a provider account","deprecated":null,"version":null,"openapi":"/openapi.json get /api/svc/v1/provider-accounts/{id}","href":"/docs/api-reference/provider-accounts/get-a-provider-account"},{"title":"Delete a provider account","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/svc/v1/provider-accounts/{id}","href":"/docs/api-reference/provider-accounts/delete-a-provider-account"}]}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/docs/ai-gateway/ecosystem"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/docs/changelog"}]}]},"basePath":"","title":"Create or update an MCP server - TrueFoundry Docs","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}