Hi <@U0A9RLDPQU8>, <@U09DMU3EM2T>, <@U06PYTVAES1>:...
# proj-agent
l
Hi @modern-fireman-99755, @strong-ice-84145, @calm-artist-7206: apologies for the big PR, but MCP settings had a few issues: 1. they used FastMCP types that we didn’t have sufficient control over, which meant that we needed lots of custom code for encryption/decryption 2. they used lots of
dict[str, Any]
types, which caused issues with type checking 3. they didn’t have sufficient support for OAuth, especially dynamic OAuth I created two PRs to fix these issues: • software-agent-sdk: github.com/OpenHands/software-agent-sdk/pull/3964 (adds consistent typing implemented in OpenHands to store MCP settings) • agent-canvas: github.com/OpenHands/agent-canvas/pull/1583 (uses this typing to also allow for dynamic oauth MCPs) Apologies in advance that these are big, but I have read all the code in the SDK PR pretty carefully (agent canvas less carefully) and done testing including running it myself and capturing screenshots.
👷 1
👀 1
🙏 1
m
I gave it a pass and found a couple of things to double-check (Just for the SDK part). I will also check the
agent-canvas
with the
agent-server
instances generated by these changes to see if I can find anything else.
I spent some time testing the
agent-canvas
and
agent-server
generated by your PRs. Everything seems fine. I noticed the
typescript-client
is not being used in
agent-canvas
yet. I assume this will change once the
agent-server
is released and the client is updated—just pointing this out so it stays on our radar. Other than that, I’ve left a few minor comments.
l
Thanks! Good point about typescript client, I should fix that...
c
@smolpaws explain to me at a high level the use cases/data flows in these two PRs. Use show-me skill, and decide whether to make 2 separate pages, with before and after. The goal is clarity and human understanding.
@bland-bear-604 ^^ not sure why it didn’t tag
b
🐾 On it. Reading both PRs — sdk #3964 (MCP settings typing) and agent-canvas #1583 (dynamic-OAuth MCPs on top of it) — then I'll build a show-me page. Leaning toward one page with a before/after per PR so the typing change and the OAuth flow read as one story, but I'll split if they don't. Back shortly with a link.
🐾 Made you a page: https://enyst.github.io/arch/mcp-oauth-settings.html Kept it one page — the two PRs are really one story. TL;DR: some MCP servers (Superhuman Mail) use OAuth, not an API key. sdk#3964 defines one typed credential model (a tagged union: `none`/`api_key`/`bearer`/`basic`/`header`/`oauth2`) + the agent-server OAuth endpoints; canvas#1583 is the UI that speaks that exact shape and drives the browser OAuth dance. Install once → creds persist encrypted in settings → next conversation reuses them, no re-auth. Page has: the big picture, the shared model side-by-side (Python vs TS), before/after for each PR, and a sequence diagram of the dynamic-OAuth install. Every claim links back to the PR. Shout if you want it split in two or want more depth anywhere.
c
@limited-student-10747 Thank you so much for this! We had a long time problem with oauth MCPs, it’s great to see! ❤️
🙌 1