Runs the RFC 6749 authorization code grant with RFC 7636 PKCE over an RFC 8252 loopback redirect: build the authorization URL with an S256 challenge and a bound state, then exchange the returned code — after the RFC 9207 iss check — for a token.
The RFC 8414 authorization server metadata document, or its OpenID Connect discovery document counterpart, restricted to the endpoints, advertised grants and scopes, and PKCE / dynamic client registration capability flags outbound OAuth discovery actually reads.
Discovers an RFC 8414 authorization server metadata document (or its OpenID Connect discovery document counterpart) over the handler-free "OAuth" named HttpClient, probing the well-known candidates for a base URI in the order that prefers a Microsoft identity platform v2 document over its v1 counterpart.
Runs the RFC 6749 section 4.4 client credentials grant: a confidential client presents its own identifier and secret and receives an access token, with no end user and no elicitation anywhere in the path.
Runs the RFC 8628 device authorization grant: start the grant at the device authorization endpoint, then poll the token endpoint honoring interval, slow_down, and authorization_pending until a token is issued, the code expires, or the end user denies it.
Registers this process as an OAuth client at an authorization server’s RFC 7591 registration_endpoint, so an operator who has no pre-registered application can still sign in.
Supplies the enterprise OpenID Connect id token the identity assertion grant exchanges, reading it from the file --idp-id-token-file names or from the ODataMcpAuthConstants.IdTokenEnvironmentVariable environment variable.
Selects the OutboundGrantKind outbound OAuth runs for a remote OData service, per step 6 of the discovery algorithm: an operator override when advertised and implemented, else enterprise identity assertion, else non-interactive client credentials, else the interactive default of device code falling back to authorization code.
The durable, single-slot SDK ITokenCache for outbound OAuth, backed by the operating system credential store through Latchkey so a restart of the same service root and client id does not re-prompt the operator.
The RFC 8252 loopback redirect endpoint the authorization code grant hands to the authorization server: an HttpListener bound to http://127.0.0.1:{ephemeral}/callback/ that accepts exactly one authorization response, binds it to the expected state, and hands back the SDK AuthorizationResult.
One parsed WWW-Authenticate challenge: the authentication scheme, the OAuth-relevant auth-params promoted to typed properties, and the complete, case-insensitive parameter set exactly as it arrived.
Thrown when interactive sign-in is required to complete an outbound OAuth grant and OutboundOAuthOptions.ConsentPresenter is null — the mid-session path, where the caller (an MCP tool invocation) must elicit the operator instead of blocking on stderr.
Runs steps 3 through 5 and 8b of the outbound OAuth discovery algorithm: parse the WWW-Authenticate challenge, fetch RFC 9728 protected resource metadata, select an authorization server from every candidate base the challenge and that metadata imply, and resolve the RFC 8707 resource indicator.
Everything the outbound OAuth discovery algorithm learned about a protected OData service: the WWW-Authenticate challenge it started from, the RFC 9728 protected resource metadata it found (if any), the authorization server it selected, and the grants, scope, and RFC 8707 resource a grant needs.
The single exception type an outbound token, device authorization, or polling request throws when the authorization server answers with an RFC 6749 section 5.2 error payload, or when the request never reached one.
Protocol identifiers for outbound OAuth: header and scheme names, well-known suffixes, grant type identifiers, wire parameter and error names, and the named HttpClients and Latchkey service name outbound OAuth wires into DI.
The "OData" named client’s delegating handler: it attaches whatever credential the operator configured, and when none was configured it drives OutboundOAuthClient through the send path — attach a still-valid token, refresh one that has fallen inside the skew, or run a grant off the challenge the resource answered with.
Masks token and credential values out of text before it reaches a log sink, per specs/v3/AUTHENTICATION.md “Observability -> Redaction” and “Security & Privacy -> Logging tokens”.
The single exception type outbound discovery throws when a well-known request fails in a way that AUTH-14 does not treat as a non-fatal fallback: a timeout, a transport failure, or a repeated server error after the one retry discovery allows.
The outbound OAuth state machine: it owns one OData service root’s cached token, decides whether that token can still be attached, refreshes it exactly once when several callers race, and runs the advertised grant when there is nothing left to refresh.
Operator-supplied and discovered outbound OAuth settings for a single remote OData service — the options CLI hop 2 (ODataOutboundAuthHandler, OutboundOAuthClient, and the grant classes) runs on.
Fetches an RFC 9728 protected resource metadata document over the handler-free "OAuth" named HttpClient, treating every well-known failure per AUTH-14: 401, 403, 404, and a failed parse are logged and swallowed; a timeout or 5xx is retried once before it becomes fatal.
Runs the RFC 6749 section 6 refresh token grant: exchange the refresh token on a cached TokenContainer for a fresh access token, preserving rotation and the client and server identity the container already carried.
Resolves the space-delimited OAuth scope a token request should ask for, per step 8 of the discovery algorithm and matching the SDK 2.2 ScopeSelectorDelegate order exactly.
Posts an RFC 6749 token request on the handler-free "OAuth" named HttpClient and turns the answer into either a TokenEndpointResponse or an OAuthTokenException. Every grant in this package — device code, refresh, authorization code, client credentials — sends its token request through this one class.
Parses WWW-Authenticate response header values into OAuthChallenge instances using the RFC 9110 section 11.6.1 challenge grammar and the RFC 6750 / RFC 9728 OAuth auth-params.
The OAuth 2.0 grant kinds outbound OAuth can select for a remote OData service.
⌘I
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"EasyAF.AI","colors":{"primary":"#419AC5","light":"#419AC5","dark":"#3CD0E2"},"appearance":{"default":"dark"},"styling":{"codeblocks":"dark","latex":false},"interaction":{"drilldown":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"easyai","hasAudioNarration":false,"actualSubdomain":"easyai","customDomains":["ai.easyaf.dev"],"gitSource":{"type":"github","owner":"cloudnimble","repo":"easyaf.ai","deployBranch":"main","contentDirectory":"src/CloudNimble.EasyAF.AI.Docs","isPrivate":false,"mountPath":"","label":"","_id":"6ade7805ae0dc487a614003c"},"chroma":{"latestBuiltDeploymentHistoryId":"6ade809117041bcf74b85fa0","collectionId":"51d7cea1-ccf4-42b3-8760-2014ab467bee","liveDeploymentHistoryId":"6ade809117041bcf74b85fa0","schemaVersion":"v3"},"entitlements":{},"buildId":"6ae29bee18e6d165dfd98eba","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"ClaudeEssentials","count":356},{"language":"default","tag":"API Reference","count":332},{"language":"default","tag":"CloudNimble","count":190},{"language":"default","tag":"Hooks","count":176},{"language":"default","tag":"OData MCP","count":148},{"language":"default","tag":"Microsoft","count":142},{"language":"default","tag":"Tools","count":135},{"language":"default","tag":"OData","count":131},{"language":"default","tag":"Mcp","count":129},{"language":"default","tag":"Core","count":65}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}h1>span.cursor-pointer>svg.icon.inline,h2>span.cursor-pointer>svg.icon.inline,h3>span.cursor-pointer>svg.icon.inline{padding-right:8px;vertical-align:top!important}::-webkit-scrollbar{width:8px}::-webkit-scrollbar:horizontal{height:8px}::-webkit-scrollbar-track{background:#0a1628}::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#3cd0e2,#419ac5);border-radius:6px}::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#419ac5,#3cd0e2)}html{scroll-behavior:smooth}code,kbd,pre,samp{font-family:\"Cascadia Code\",var(--font-jetbrains-mono),ui-monospace,SFMono-Regular,Menlo,Monaco,\"Liberation Mono\",\"Courier New\",monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em;line-height:1.5em}"}],"page":{"pagePath":"odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound","slug":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound","pageMetadata":{"title":"Overview","description":"Summary of the Microsoft.OData.Mcp.Authentication.Outbound Namespace","icon":"folder-tree","mode":"wide","keywords":["Microsoft.OData.Mcp.Authentication.Outbound","namespace","AuthorizationCodePkceGrant","AuthorizationServerMetadata","AuthorizationServerMetadataClient","ClientCredentialsGrant","DeviceAuthorizationResponse","DeviceCodeGrant","DynamicClientRegistrar","DynamicClientRegistrationRequest","FileIdTokenCallback","GrantSelector"],"href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/index"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Summary of the Microsoft.OData.Mcp.Authentication.Outbound Namespace\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,Icon,Table}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Icon)_missingMdxReference(`Icon`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`types`,children:`Types`}),`\n`,_jsxs(Heading,{level:`3`,id:`classes`,children:[_jsx(Icon,{icon:`file-brackets-curly`,iconType:`duotone`,color:`#419AC5`,size:24,style:{paddingRight:`8px`}}),` Classes`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Name`}),_jsx(_components.th,{children:`Summary`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/AuthorizationCodePkceGrant`,children:`AuthorizationCodePkceGrant`})}),_jsxs(_components.td,{children:[`Runs the RFC 6749 authorization code grant with RFC 7636 PKCE over an RFC 8252 loopback redirect: build the authorization URL with an `,_jsx(_components.code,{children:`S256`}),` challenge and a bound `,_jsx(_components.code,{children:`state`}),`, then exchange the returned code — after the RFC 9207 `,_jsx(_components.code,{children:`iss`}),` check — for a token.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/AuthorizationServerMetadata`,children:`AuthorizationServerMetadata`})}),_jsx(_components.td,{children:`The RFC 8414 authorization server metadata document, or its OpenID Connect discovery document counterpart, restricted to the endpoints, advertised grants and scopes, and PKCE / dynamic client registration capability flags outbound OAuth discovery actually reads.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/AuthorizationServerMetadataClient`,children:`AuthorizationServerMetadataClient`})}),_jsxs(_components.td,{children:[`Discovers an RFC 8414 authorization server metadata document (or its OpenID Connect discovery document counterpart) over the handler-free `,_jsx(_components.code,{children:`\"OAuth\"`}),` named `,_jsx(_components.a,{href:`https://learn.microsoft.com/dotnet/api/system.net.http.httpclient`,children:`HttpClient`}),`, probing the well-known candidates for a base URI in the order that prefers a Microsoft identity platform v2 document over its v1 counterpart.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/ClientCredentialsGrant`,children:`ClientCredentialsGrant`})}),_jsx(_components.td,{children:`Runs the RFC 6749 section 4.4 client credentials grant: a confidential client presents its own identifier and secret and receives an access token, with no end user and no elicitation anywhere in the path.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/DeviceAuthorizationResponse`,children:`DeviceAuthorizationResponse`})}),_jsx(_components.td,{children:`The RFC 8628 section 3.2 device authorization response returned from a device authorization endpoint.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/DeviceCodeGrant`,children:`DeviceCodeGrant`})}),_jsxs(_components.td,{children:[`Runs the RFC 8628 device authorization grant: start the grant at the device authorization endpoint, then poll the token endpoint honoring `,_jsx(_components.code,{children:`interval`}),`, `,_jsx(_components.code,{children:`slow_down`}),`, and `,_jsx(_components.code,{children:`authorization_pending`}),` until a token is issued, the code expires, or the end user denies it.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/DynamicClientRegistrar`,children:`DynamicClientRegistrar`})}),_jsxs(_components.td,{children:[`Registers this process as an OAuth client at an authorization server’s RFC 7591 `,_jsx(_components.code,{children:`registration_endpoint`}),`, so an operator who has no pre-registered application can still sign in.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/DynamicClientRegistrationRequest`,children:`DynamicClientRegistrationRequest`})}),_jsxs(_components.td,{children:[`The RFC 7591 section 2 client metadata document `,_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/DynamicClientRegistrar`,children:`DynamicClientRegistrar`}),` POSTs to an authorization server’s `,_jsx(_components.code,{children:`registration_endpoint`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/FileIdTokenCallback`,children:`FileIdTokenCallback`})}),_jsxs(_components.td,{children:[`Supplies the enterprise OpenID Connect id token the identity assertion grant exchanges, reading it from the file `,_jsx(_components.code,{children:`--idp-id-token-file`}),` names or from the `,_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/ODataMcpAuthConstants#idtokenenvironmentvariable`,children:`ODataMcpAuthConstants.IdTokenEnvironmentVariable`}),` environment variable.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/GrantSelector`,children:`GrantSelector`})}),_jsxs(_components.td,{children:[`Selects the `,_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundGrantKind`,children:`OutboundGrantKind`}),` outbound OAuth runs for a remote OData service, per step 6 of the discovery algorithm: an operator override when advertised and implemented, else enterprise identity assertion, else non-interactive client credentials, else the interactive default of device code falling back to authorization code.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/LatchkeyTokenCache`,children:`LatchkeyTokenCache`})}),_jsxs(_components.td,{children:[`The durable, single-slot SDK `,_jsx(_components.code,{children:`ITokenCache`}),` for outbound OAuth, backed by the operating system credential store through `,_jsx(_components.a,{href:`https://www.nuget.org/packages/Latchkey`,children:`Latchkey`}),` so a restart of the same service root and client id does not re-prompt the operator.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/LoopbackAuthorizationCallback`,children:`LoopbackAuthorizationCallback`})}),_jsxs(_components.td,{children:[`The RFC 8252 loopback redirect endpoint the authorization code grant hands to the authorization server: an `,_jsx(_components.a,{href:`https://learn.microsoft.com/dotnet/api/system.net.httplistener`,children:`HttpListener`}),` bound to `,_jsx(_components.code,{children:`http://127.0.0.1:{ephemeral}/callback/`}),` that accepts exactly one authorization response, binds it to the expected `,_jsx(_components.code,{children:`state`}),`, and hands back the SDK `,_jsx(_components.code,{children:`AuthorizationResult`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthChallenge`,children:`OAuthChallenge`})}),_jsxs(_components.td,{children:[`One parsed `,_jsx(_components.code,{children:`WWW-Authenticate`}),` challenge: the authentication scheme, the OAuth-relevant auth-params promoted to typed properties, and the complete, case-insensitive parameter set exactly as it arrived.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthConsentRequiredException`,children:`OAuthConsentRequiredException`})}),_jsxs(_components.td,{children:[`Thrown when interactive sign-in is required to complete an outbound OAuth grant and `,_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundOAuthOptions#consentpresenter`,children:`OutboundOAuthOptions.ConsentPresenter`}),` is `,_jsx(_components.a,{href:`https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/null`,children:_jsx(_components.code,{children:`null`})}),` — the mid-session path, where the caller (an MCP tool invocation) must elicit the operator instead of blocking on stderr.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthDiscovery`,children:`OAuthDiscovery`})}),_jsxs(_components.td,{children:[`Runs steps 3 through 5 and 8b of the outbound OAuth discovery algorithm: parse the `,_jsx(_components.code,{children:`WWW-Authenticate`}),` challenge, fetch RFC 9728 protected resource metadata, select an authorization server from every candidate base the challenge and that metadata imply, and resolve the RFC 8707 resource indicator.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthDiscoveryResult`,children:`OAuthDiscoveryResult`})}),_jsxs(_components.td,{children:[`Everything the outbound OAuth discovery algorithm learned about a protected OData service: the `,_jsx(_components.code,{children:`WWW-Authenticate`}),` challenge it started from, the RFC 9728 protected resource metadata it found (if any), the authorization server it selected, and the grants, scope, and RFC 8707 resource a grant needs.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthErrorPayload`,children:`OAuthErrorPayload`})}),_jsx(_components.td,{children:`The RFC 6749 section 5.2 error response returned from a token, device authorization, or dynamic client registration endpoint.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthTokenException`,children:`OAuthTokenException`})}),_jsx(_components.td,{children:`The single exception type an outbound token, device authorization, or polling request throws when the authorization server answers with an RFC 6749 section 5.2 error payload, or when the request never reached one.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/ODataMcpAuthConstants`,children:`ODataMcpAuthConstants`})}),_jsxs(_components.td,{children:[`Protocol identifiers for outbound OAuth: header and scheme names, well-known suffixes, grant type identifiers, wire parameter and error names, and the named `,_jsx(_components.code,{children:`HttpClient`}),`s and Latchkey service name outbound OAuth wires into DI.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/ODataOutboundAuthHandler`,children:`ODataOutboundAuthHandler`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.code,{children:`\"OData\"`}),` named client’s delegating handler: it attaches whatever credential the operator configured, and when none was configured it drives `,_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundOAuthClient`,children:`OutboundOAuthClient`}),` through the send path — attach a still-valid token, refresh one that has fallen inside the skew, or run a grant off the challenge the resource answered with.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundAuthLogRedactor`,children:`OutboundAuthLogRedactor`})}),_jsxs(_components.td,{children:[`Masks token and credential values out of text before it reaches a log sink, per `,_jsx(_components.code,{children:`specs/v3/AUTHENTICATION.md`}),` “Observability -> Redaction” and “Security \u0026 Privacy -> Logging tokens”.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundConsentRequest`,children:`OutboundConsentRequest`})}),_jsxs(_components.td,{children:[`The consent-request payload passed to `,_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundOAuthOptions#consentpresenter`,children:`OutboundOAuthOptions.ConsentPresenter`}),`, and carried by `,_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthConsentRequiredException`,children:`OAuthConsentRequiredException`}),`, when interactive sign-in is required to complete an outbound OAuth grant.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundDiscoveryException`,children:`OutboundDiscoveryException`})}),_jsxs(_components.td,{children:[`The single exception type outbound discovery throws when a well-known request fails in a way that `,_jsx(_components.code,{children:`AUTH-14`}),` does not treat as a non-fatal fallback: a timeout, a transport failure, or a repeated server error after the one retry discovery allows.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundGrantKind`,children:`OutboundGrantKind`})}),_jsx(_components.td,{children:`The OAuth 2.0 grant kinds outbound OAuth can select for a remote OData service.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundGrantKindParser`,children:`OutboundGrantKindParser`})}),_jsxs(_components.td,{children:[`Parses and formats the CLI `,_jsx(_components.code,{children:`--grant`}),` wire names for `,_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundGrantKind`,children:`OutboundGrantKind`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundOAuthClient`,children:`OutboundOAuthClient`})}),_jsx(_components.td,{children:`The outbound OAuth state machine: it owns one OData service root’s cached token, decides whether that token can still be attached, refreshes it exactly once when several callers race, and runs the advertised grant when there is nothing left to refresh.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundOAuthOptions`,children:`OutboundOAuthOptions`})}),_jsxs(_components.td,{children:[`Operator-supplied and discovered outbound OAuth settings for a single remote OData service — the options CLI hop 2 (`,_jsx(_components.code,{children:`ODataOutboundAuthHandler`}),`, `,_jsx(_components.code,{children:`OutboundOAuthClient`}),`, and the grant classes) runs on.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/ProtectedResourceMetadataClient`,children:`ProtectedResourceMetadataClient`})}),_jsxs(_components.td,{children:[`Fetches an RFC 9728 protected resource metadata document over the handler-free `,_jsx(_components.code,{children:`\"OAuth\"`}),` named `,_jsx(_components.a,{href:`https://learn.microsoft.com/dotnet/api/system.net.http.httpclient`,children:`HttpClient`}),`, treating every well-known failure per `,_jsx(_components.code,{children:`AUTH-14`}),`: 401, 403, 404, and a failed parse are logged and swallowed; a timeout or 5xx is retried once before it becomes fatal.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/RefreshTokenGrant`,children:`RefreshTokenGrant`})}),_jsxs(_components.td,{children:[`Runs the RFC 6749 section 6 refresh token grant: exchange the refresh token on a cached `,_jsx(_components.code,{children:`TokenContainer`}),` for a fresh access token, preserving rotation and the client and server identity the container already carried.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/ScopeResolver`,children:`ScopeResolver`})}),_jsxs(_components.td,{children:[`Resolves the space-delimited OAuth `,_jsx(_components.code,{children:`scope`}),` a token request should ask for, per step 8 of the discovery algorithm and matching the SDK 2.2 `,_jsx(_components.code,{children:`ScopeSelectorDelegate`}),` order exactly.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/TokenEndpointClient`,children:`TokenEndpointClient`})}),_jsxs(_components.td,{children:[`Posts an RFC 6749 token request on the handler-free `,_jsx(_components.code,{children:`\"OAuth\"`}),` named `,_jsx(_components.a,{href:`https://learn.microsoft.com/dotnet/api/system.net.http.httpclient`,children:`HttpClient`}),` and turns the answer into either a `,_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/TokenEndpointResponse`,children:`TokenEndpointResponse`}),` or an `,_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthTokenException`,children:`OAuthTokenException`}),`. Every grant in this package — device code, refresh, authorization code, client credentials — sends its token request through this one class.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/TokenEndpointResponse`,children:`TokenEndpointResponse`})}),_jsx(_components.td,{children:`The RFC 6749 section 5.1 successful token response returned from a token endpoint.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/WwwAuthenticateParser`,children:`WwwAuthenticateParser`})}),_jsxs(_components.td,{children:[`Parses `,_jsx(_components.code,{children:`WWW-Authenticate`}),` response header values into `,_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthChallenge`,children:`OAuthChallenge`}),` instances using the RFC 9110 section 11.6.1 challenge grammar and the RFC 6750 / RFC 9728 OAuth auth-params.`]})]})]})]}),`\n`,_jsxs(Heading,{level:`3`,id:`enums`,children:[_jsx(Icon,{icon:`list-ol`,iconType:`duotone`,color:`#419AC5`,size:24,style:{paddingRight:`8px`}}),` Enums`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Name`}),_jsx(_components.th,{children:`Summary`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundGrantKind`,children:`OutboundGrantKind`})}),_jsx(_components.td,{children:`The OAuth 2.0 grant kinds outbound OAuth can select for a remote OData service.`})]})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Overview","description":"Summary of the Microsoft.OData.Mcp.Authentication.Outbound Namespace","icon":"folder-tree","mode":"wide","keywords":["Microsoft.OData.Mcp.Authentication.Outbound","namespace","AuthorizationCodePkceGrant","AuthorizationServerMetadata","AuthorizationServerMetadataClient","ClientCredentialsGrant","DeviceAuthorizationResponse","DeviceCodeGrant","DynamicClientRegistrar","DynamicClientRegistrationRequest","FileIdTokenCallback","GrantSelector"],"href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/index"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Types","slug":"types","depth":2,"children":[{"title":" Classes","slug":"classes","depth":3,"children":[]},{"title":" Enums","slug":"enums","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"easyai","siteName":"EasyAF.AI","title":"Overview - EasyAF.AI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T01:06:05.263Z","originalFileLocation":"odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/index.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=\"dark\"}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=\"Summary of the Microsoft.OData.Mcp.Authentication.Outbound Namespace\">\u003cmeta data-mint-head name=\"application-name\" content=\"EasyAF.AI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/easyai/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/easyai/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/easyai/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/easyai/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Overview - EasyAF.AI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Summary of the Microsoft.OData.Mcp.Authentication.Outbound Namespace\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"EasyAF.AI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://easyai.mintlify.app/_mintlify/api/og/v2?division=Outbound\u0026amp;title=Overview\u0026amp;description=Summary+of+the+Microsoft.OData.Mcp.Authentication.Outbound+Namespace\u0026amp;theme=56805c0213358eba10966f03\u0026amp;signature=47d45b65bd649b3f7b316dbeabdc1d181573d879bc3dc630875f8478784b1fea\">\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=\"Overview - EasyAF.AI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Summary of the Microsoft.OData.Mcp.Authentication.Outbound Namespace\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://easyai.mintlify.app/_mintlify/api/og/v2?division=Outbound\u0026amp;title=Overview\u0026amp;description=Summary+of+the+Microsoft.OData.Mcp.Authentication.Outbound+Namespace\u0026amp;theme=56805c0213358eba10966f03\u0026amp;signature=47d45b65bd649b3f7b316dbeabdc1d181573d879bc3dc630875f8478784b1fea\">\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=\"https://mintlify.s3.us-west-1.amazonaws.com/easyai/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"EasyAF.AI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#419AC5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://ai.easyaf.dev/#organization\",\"name\":\"EasyAF.AI\",\"url\":\"https://ai.easyaf.dev\"},{\"@type\":\"WebSite\",\"@id\":\"https://ai.easyaf.dev#website\",\"name\":\"EasyAF.AI\",\"url\":\"https://ai.easyaf.dev\",\"publisher\":{\"@id\":\"https://ai.easyaf.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound#webpage\",\"url\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound\",\"name\":\"Overview\",\"description\":\"Summary of the Microsoft.OData.Mcp.Authentication.Outbound Namespace\",\"dateModified\":\"2026-10-29T01:06:05.263Z\",\"isPartOf\":{\"@id\":\"https://ai.easyaf.dev#website\"},\"breadcrumb\":{\"@id\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/AspNetCore/Builder/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microsoft\",\"item\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/AspNetCore/Builder/index\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"OData\",\"item\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Adaptation/index\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Mcp\",\"item\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Adaptation/index\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Authentication\",\"item\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/index\"},{\"@type\":\"ListItem\",\"position\":6,\"name\":\"Outbound\",\"item\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/index\"},{\"@type\":\"ListItem\",\"position\":7,\"name\":\"Overview\",\"item\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound#article\",\"headline\":\"Overview\",\"name\":\"Overview\",\"description\":\"Summary of the Microsoft.OData.Mcp.Authentication.Outbound Namespace\",\"url\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound\",\"mainEntityOfPage\":{\"@id\":\"https://ai.easyaf.dev/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound#webpage\"},\"dateModified\":\"2026-10-29T01:06:05.263Z\",\"keywords\":\"Microsoft.OData.Mcp.Authentication.Outbound, namespace, AuthorizationCodePkceGrant, AuthorizationServerMetadata, AuthorizationServerMetadataClient, ClientCredentialsGrant, DeviceAuthorizationResponse, DeviceCodeGrant, DynamicClientRegistrar, DynamicClientRegistrationRequest, FileIdTokenCallback, GrantSelector\",\"publisher\":{\"@id\":\"https://ai.easyaf.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://ai.easyaf.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"EasyAF.AI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"EasyAF.AI","nav":{"global":null,"tabs":[{"tab":"EasyAF.AI","pages":[{"title":"EasyAF.AI","href":""}]},{"tab":"MCP Essentials","pages":[{"title":"MCP Essentials","href":"/mcpessentials"}]},{"tab":"OData MCP","pages":[{"group":"Getting Started","icon":"stars","pages":[{"title":"Microsoft OData for AI","href":"/odata-mcp"}]},{"group":"Guides","icon":"dog-leashed","root":{"title":"Guides","href":"/odata-mcp/guides/index"},"pages":[{"title":"Guides","href":"/odata-mcp/guides/index"},{"group":"Local MCP","root":{"title":"Local MCP","href":"/odata-mcp/guides/local/index"},"pages":[{"title":"Local MCP","href":"/odata-mcp/guides/local/index"},{"title":"Use Local MCP","href":"/odata-mcp/guides/local/get-started"},{"title":"Sign in to the service","href":"/odata-mcp/guides/local/sign-in"},{"title":"How Local MCP works","href":"/odata-mcp/guides/local/how-it-works"}]},{"group":"Remote MCP","root":{"title":"Remote MCP","href":"/odata-mcp/guides/remote/index"},"pages":[{"title":"Remote MCP","href":"/odata-mcp/guides/remote/index"},{"title":"Add Remote MCP to your API","href":"/odata-mcp/guides/remote/setup"},{"title":"Tune Remote MCP","href":"/odata-mcp/guides/remote/advanced"},{"title":"Long-running actions","href":"/odata-mcp/guides/remote/tasks"},{"title":"Ask the operator to open a URL","href":"/odata-mcp/guides/remote/elicitations"},{"title":"Lock Remote MCP like the API","href":"/odata-mcp/guides/remote/authentication"}]}]},{"group":"API Reference","icon":"code","pages":[{"group":"Microsoft","icon":"folder-tree","pages":[{"group":"AspNetCore","icon":"folder-tree","pages":[{"group":"Builder","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/AspNetCore/Builder/index"},{"title":"IApplicationBuilder","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/AspNetCore/Builder/IApplicationBuilder"}]}]},{"group":"Extensions","icon":"folder-tree","pages":[{"group":"DependencyInjection","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/Extensions/DependencyInjection/index"},{"title":"IMcpServerBuilder","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/Extensions/DependencyInjection/IMcpServerBuilder"},{"title":"IServiceCollection","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/Extensions/DependencyInjection/IServiceCollection"}]}]},{"group":"OData","icon":"folder-tree","pages":[{"group":"Mcp","icon":"folder-tree","pages":[{"group":"AspNetCore","icon":"folder-tree","pages":[{"group":"Adaptation","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Adaptation/index"},{"title":"EdmModelAdapter","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Adaptation/EdmModelAdapter"}]},{"group":"Authentication","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Authentication/index"},{"title":"ProtectedResourceMetadataMiddleware","icon":"lock","sidebarTitle":"ProtectedResourceMetadataMiddleware","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Authentication/ProtectedResourceMetadataMiddleware"},{"title":"ProtectedResourceMetadataOptions","icon":"lock","sidebarTitle":"ProtectedResourceMetadataOptions","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Authentication/ProtectedResourceMetadataOptions"},{"title":"ProtectedResourceMetadataStartupFilter","icon":"lock","sidebarTitle":"ProtectedResourceMetadataStartupFilter","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Authentication/ProtectedResourceMetadataStartupFilter"}]},{"group":"Constants","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Constants/index"},{"title":"AspNetCoreJsonConstants","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Constants/AspNetCoreJsonConstants"},{"title":"ProtectedResourceConstants","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Constants/ProtectedResourceConstants"}]},{"group":"Execution","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Execution/index"},{"title":"InProcessODataExecutor","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Execution/InProcessODataExecutor"}]},{"group":"Hosting","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/index"},{"title":"IMcpAnnotatedActionWaiter","icon":"plug","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/IMcpAnnotatedActionWaiter"},{"title":"McpAnnotatedActionContext","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpAnnotatedActionContext"},{"title":"McpHttpContextAccessor","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/McpHttpContextAccessor"},{"title":"ODataMcpHostOptions","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/ODataMcpHostOptions"},{"title":"ODataMcpPipeline","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/ODataMcpPipeline"},{"title":"ODataMcpPipelineStartupFilter","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/ODataMcpPipelineStartupFilter"},{"title":"ODataMcpRouteBinding","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/ODataMcpRouteBinding"},{"title":"ODataMcpRouteDiscovery","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/ODataMcpRouteDiscovery"},{"title":"ODataMcpServerBuilder","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/ODataMcpServerBuilder"},{"title":"ODataMcpSessionFactory","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Hosting/ODataMcpSessionFactory"}]},{"group":"Vocabularies","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Vocabularies/index"},{"title":"McpTaskAnnotations","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Vocabularies/McpTaskAnnotations"},{"title":"McpTaskAttributeAnnotations","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Vocabularies/McpTaskAttributeAnnotations"},{"title":"McpVocabularyModel","description":"EdmLib facade for the `Microsoft.OData.Mcp.V1` vocabulary shipped in Core.","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/AspNetCore/Vocabularies/McpVocabularyModel"}]}]},{"group":"Authentication","icon":"folder-tree","pages":[{"group":"Outbound","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/index"},{"title":"AuthorizationCodePkceGrant","description":"Runs the RFC 6749 authorization code grant with RFC 7636 PKCE over an RFC 8252 loopback redirect: build the authorization URL with an `S256` challenge and a ...","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/AuthorizationCodePkceGrant"},{"title":"AuthorizationServerMetadata","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/AuthorizationServerMetadata"},{"title":"AuthorizationServerMetadataClient","icon":"lock","sidebarTitle":"AuthorizationServerMetadataClient","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/AuthorizationServerMetadataClient"},{"title":"ClientCredentialsGrant","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/ClientCredentialsGrant"},{"title":"DeviceAuthorizationResponse","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/DeviceAuthorizationResponse"},{"title":"DeviceCodeGrant","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/DeviceCodeGrant"},{"title":"DynamicClientRegistrar","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/DynamicClientRegistrar"},{"title":"DynamicClientRegistrationRequest","icon":"lock","sidebarTitle":"DynamicClientRegistrationRequest","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/DynamicClientRegistrationRequest"},{"title":"FileIdTokenCallback","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/FileIdTokenCallback"},{"title":"GrantSelector","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/GrantSelector"},{"title":"LatchkeyTokenCache","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/LatchkeyTokenCache"},{"title":"LoopbackAuthorizationCallback","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/LoopbackAuthorizationCallback"},{"title":"OAuthChallenge","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthChallenge"},{"title":"OAuthConsentRequiredException","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthConsentRequiredException"},{"title":"OAuthDiscovery","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthDiscovery"},{"title":"OAuthDiscoveryResult","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthDiscoveryResult"},{"title":"OAuthErrorPayload","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthErrorPayload"},{"title":"OAuthTokenException","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OAuthTokenException"},{"title":"ODataMcpAuthConstants","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/ODataMcpAuthConstants"},{"title":"ODataOutboundAuthHandler","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/ODataOutboundAuthHandler"},{"title":"OutboundAuthLogRedactor","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundAuthLogRedactor"},{"title":"OutboundConsentRequest","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundConsentRequest"},{"title":"OutboundDiscoveryException","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundDiscoveryException"},{"title":"OutboundGrantKind","icon":"list-ol","tag":"ENUM","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundGrantKind"},{"title":"OutboundGrantKindParser","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundGrantKindParser"},{"title":"OutboundOAuthClient","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundOAuthClient"},{"title":"OutboundOAuthOptions","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/OutboundOAuthOptions"},{"title":"ProtectedResourceMetadataClient","icon":"lock","sidebarTitle":"ProtectedResourceMetadataClient","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/ProtectedResourceMetadataClient"},{"title":"RefreshTokenGrant","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/RefreshTokenGrant"},{"title":"ScopeResolver","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/ScopeResolver"},{"title":"TokenEndpointClient","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/TokenEndpointClient"},{"title":"TokenEndpointResponse","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/TokenEndpointResponse"},{"title":"WwwAuthenticateParser","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Authentication/Outbound/WwwAuthenticateParser"}]}]},{"group":"Core","icon":"folder-tree","pages":[{"group":"Catalog","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/index"},{"title":"EdmModelShape","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/EdmModelShape"},{"title":"EdmPayloadValidator","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/EdmPayloadValidator"},{"title":"EdmTypeShape","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/EdmTypeShape"},{"title":"ODataEnumJsonFormat","icon":"list-ol","tag":"ENUM","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/ODataEnumJsonFormat"},{"title":"ODataMcpCatalog","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/ODataMcpCatalog"},{"title":"ODataMcpCatalogOptions","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/ODataMcpCatalogOptions"},{"title":"ODataMcpInstructions","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/ODataMcpInstructions"},{"title":"ODataMcpSession","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/ODataMcpSession"},{"title":"ODataOperationKind","icon":"list-ol","tag":"ENUM","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/ODataOperationKind"},{"title":"ODataResourceDescriptor","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/ODataResourceDescriptor"},{"title":"ODataResourceTemplateDescriptor","icon":"lock","sidebarTitle":"ODataResourceTemplateDescriptor","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/ODataResourceTemplateDescriptor"},{"title":"ODataToolDescriptor","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/ODataToolDescriptor"},{"title":"ODataToolInvocationResult","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/ODataToolInvocationResult"},{"title":"ODataToolRuntime","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Catalog/ODataToolRuntime"}]},{"group":"Constants","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Constants/index"},{"title":"JsonConstants","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Constants/JsonConstants"},{"title":"ODataMcpCatalogConstants","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Constants/ODataMcpCatalogConstants"}]},{"group":"Diagnostics","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Diagnostics/index"},{"title":"ProbeOutcome","icon":"list-ol","tag":"ENUM","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Diagnostics/ProbeOutcome"},{"title":"ProbeStep","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Diagnostics/ProbeStep"},{"title":"ServiceProbe","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Diagnostics/ServiceProbe"},{"title":"ServiceProbeResult","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Diagnostics/ServiceProbeResult"},{"title":"ServiceVerdict","icon":"list-ol","tag":"ENUM","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Diagnostics/ServiceVerdict"}]},{"group":"Execution","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Execution/index"},{"title":"IODataExecutor","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Execution/IODataExecutor"},{"title":"ODataExecuteRequest","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Execution/ODataExecuteRequest"},{"title":"ODataExecuteResult","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Execution/ODataExecuteResult"},{"title":"RemoteODataExecutor","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Execution/RemoteODataExecutor"}]},{"group":"Models","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/index"},{"title":"EdmAction","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmAction"},{"title":"EdmActionImport","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmActionImport"},{"title":"EdmComplexType","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmComplexType"},{"title":"EdmDocumentation","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmDocumentation"},{"title":"EdmEntityContainer","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmEntityContainer"},{"title":"EdmEntitySet","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmEntitySet"},{"title":"EdmEntityType","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmEntityType"},{"title":"EdmEnumMember","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmEnumMember"},{"title":"EdmEnumType","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmEnumType"},{"title":"EdmFunction","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmFunction"},{"title":"EdmFunctionImport","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmFunctionImport"},{"title":"EdmModel","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmModel"},{"title":"EdmNavigationProperty","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmNavigationProperty"},{"title":"EdmNavigationPropertyBinding","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmNavigationPropertyBinding"},{"title":"EdmParameter","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmParameter"},{"title":"EdmPrimitiveType","icon":"list-ol","tag":"ENUM","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmPrimitiveType"},{"title":"EdmProperty","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmProperty"},{"title":"EdmReferentialConstraint","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmReferentialConstraint"},{"title":"EdmSingleton","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Models/EdmSingleton"}]},{"group":"Parsing","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Parsing/index"},{"title":"CsdlParser","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Parsing/CsdlParser"},{"title":"ICsdlMetadataParser","icon":"plug","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Parsing/ICsdlMetadataParser"}]},{"group":"Vocabularies","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Vocabularies/index"},{"title":"McpElicitUrlAttribute","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Vocabularies/McpElicitUrlAttribute"},{"title":"McpTaskAttribute","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Vocabularies/McpTaskAttribute"},{"title":"McpVocabulary","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Core/Vocabularies/McpVocabulary"}]}]},{"group":"Tools","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/index"},{"title":"Program","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Program"},{"group":"Commands","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Commands/index"},{"title":"AddAuthChoice","icon":"list-ol","tag":"ENUM","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Commands/AddAuthChoice"},{"title":"AddCommand","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Commands/AddCommand"},{"title":"AddCommandAuthSettings","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Commands/AddCommandAuthSettings"},{"title":"ODataMcpRootCommand","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Commands/ODataMcpRootCommand"},{"title":"StartCommand","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Commands/StartCommand"},{"title":"TryCommand","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Commands/TryCommand"}]},{"group":"Hosting","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Hosting/index"},{"title":"ShutdownServerTool","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Hosting/ShutdownServerTool"},{"title":"StdioConsentPresenter","icon":"bolt","tag":"STATIC","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Hosting/StdioConsentPresenter"},{"title":"ToolsMcpHost","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Hosting/ToolsMcpHost"},{"title":"ToolsMcpSessionHolder","icon":"lock","tag":"SEALED","href":"/odata-mcp/api-reference/Microsoft/OData/Mcp/Tools/Hosting/ToolsMcpSessionHolder"}]}]}]},{"group":"ModelBuilder","icon":"folder-tree","pages":[{"title":"Overview","icon":"folder-tree","mode":"wide","href":"/odata-mcp/api-reference/Microsoft/OData/ModelBuilder/index"},{"title":"ActionConfiguration","icon":"file-brackets-curly","href":"/odata-mcp/api-reference/Microsoft/OData/ModelBuilder/ActionConfiguration"}]}]}]}]}]},{"tab":"ClaudeEssentials","pages":[{"title":"ClaudeEssentials","href":"/claudeessentials"}]}]},"title":"Overview - EasyAF.AI","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":[],"chunks":[]}