feat(mcp): add HTTP JWT delegation - #125
Merged
Merged
Conversation
nmartorell
marked this pull request as ready for review
September 8, 2026 18:27
Contributor
|
Nice implementation @nmartorell ! Two questions I had :
|
Contributor
Author
|
@yjouini Addressed in 886b0fa.
Validation: pre-commit, 430 tests, and package build all pass. |
This was referenced Sep 10, 2026
pmasiphelps
requested changes
Sep 10, 2026
pmasiphelps
left a comment
Collaborator
There was a problem hiding this comment.
I split my comments and suggested changes into two stacked PRs because some are more exploratory than others:
- #155 is the more straightforward one. It updates user-facing “DSS” terminology to “Dataiku,” introduces personal stdio vs. customer-managed HTTP in the README, and routes the dataiku-headless-setup skill to separate setup references because the two flows are quite different.
- #156 explores an easier distribution path for customer-managed HTTP. Command-line setup may be too much for some users, so it adds a generator that creates a customer-specific Codex/Claude plugin containing the skills and MCP endpoint, with interactive OAuth. It deliberately excludes the customer’s server configuration and secrets. Very open to feedback—or to leaving this kind of packaging to customers if that’s preferable.
* docs(onboarding): distinguish HTTP and stdio setup * feat(plugins): render HTTP plugin variant * fix(plugins): restore stdio setup skill * fix(setup): check MCP before uv * chore(gitignore): added http assets to gitignore * docs(skills): skip uv check when testing stdio --------- Co-authored-by: Ned Martorell <32619850+nmartorell@users.noreply.github.com>
Collaborator
|
@nmartorell i made a slight change to the dataiku-headless-setup skill to add instructions for adding the mcp server based on cli or desktop app (was prev just cli) |
Collaborator
|
@nmartorell codex wants these two changes too....i think 1 seems straightforward. 2 ill leave up to you whether to only support interactive oauth in the plugin or change the generator direct bearer tokens?
|
pmasiphelps
self-requested a review
September 15, 2026 15:43
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
This PR adds a production-oriented Streamable HTTP deployment mode while preserving the existing local stdio workflow.
In stdio mode, the MCP server remains a local process configured with DSS API keys. In HTTP mode, it can be deployed centrally behind HTTPS, expose an administrator-defined catalog of reachable DSS instances, and authenticate multiple users through an enterprise identity provider.
Authentication and request flow
HTTP callers authenticate with an access token issued for the MCP server. For each tool call, the server identifies the caller, snapshots that user’s selected DSS instance, and exchanges the incoming token for a delegated token accepted by that DSS instance. The delegated token and request identity exist only for the lifetime of the call.
The HTTP configuration supports Microsoft Entra ID v2 on-behalf-of delegation and a generic OIDC flow using RFC 8693 token exchange. Interactive OAuth login can be enabled for agent harnesses, while custom clients can supply bearer tokens directly.
Tools that only manage MCP-local state do not require DSS token exchange. Retained Cobuild conversations are isolated by authenticated user and instance, and their DSS client is refreshed with the delegated token from each subsequent request.
Configuration and startup
The configuration layer is split by transport but uses shared validated models and file handling:
The HTTP deployment guide documents the architecture, Entra setup, generic RFC 8693 setup, and the DSS JWT trust configuration required for delegated access.
Validation
Review
To facilitate the review, I setup a remote MCP server connected to the ai-dev-kit instance. If reviewing with codex, first register and login to the mcp server:
Then start codex, optionally stop the local mcp server version (by disabling the plugin), and then run some functional tests (e.g. list instances, switch instance, count projects, etc.).
Note: due to the issue with jwt<>dss user mapping (which will be fixed in DSS 15.0.2), I will need to create a user for you manually on the instance with the EntraID sub present in your jwt tokens. It is not possible for me to find these out prior to them being issued by Entra, so we will probably have to do this together (as I'm printing the jwt sub in the mcp logs temporarily).
It would also be good to manually test the stdio server, by e.g. checking out the repo on this branch, and installing headless as a local plugin. Just to make sure nothing is broken in the stdio setup (I've checked, but would be good for someone else to check too).