feat: add remote MCP server management API endpoints#2254
Conversation
There was a problem hiding this comment.
Claude Code Review
This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.
Tip: disable this comment in your organization's Code Review settings.
🦋 Changeset detectedLatest commit: 6f743c3 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
5687062 to
0171b94
Compare
0171b94 to
de21a64
Compare
de21a64 to
efd77b2
Compare
| Format(FormatUUID) | ||
| }) | ||
| Attribute("project_id", String, "The project ID this remote MCP server belongs to", func() { | ||
| Format(FormatUUID) |
There was a problem hiding this comment.
Do double check me on this, but I think we have the practice of not exposing the type of IDs we have internally - so just accepting a freeform string is OK, we can fail validation without letting external users know we use uuids internally. Unsure if it's a generic convention or if it was for a specific bit of work.
There was a problem hiding this comment.
I can look around to find the convention and update, but I'll be looking to understand the validation flow and data typing better. Seems worse to defer known format validation until a much later time in the request flow (e.g. if we leave it to database query to return an error). If we were changing ID formats, it would be a much bigger TODO involving adjusting database tables and such already.
There was a problem hiding this comment.
I wasn't suggesting changing / that we would change ID formats. It's mostly a concern around exposing how we store data internally (people will know that our IDs expect a UUID). This might be a minor thing so happy to keep it as is.
efd77b2 to
442a863
Compare
🚀 Preview Environment (PR #2254)Preview URL: https://pr-2254.dev.getgram.ai
Gram Preview Bot |
442a863 to
425e335
Compare
|
@tgmendes I think I've addressed everything if you can take another look please |
425e335 to
f3e7ea4
Compare
| Format(FormatUUID) | ||
| }) | ||
| Attribute("project_id", String, "The project ID this remote MCP server belongs to", func() { | ||
| Format(FormatUUID) |
There was a problem hiding this comment.
I wasn't suggesting changing / that we would change ID formats. It's mostly a concern around exposing how we store data internally (people will know that our IDs expect a UUID). This might be a minor thing so happy to keep it as is.
f3e7ea4 to
6529be7
Compare
https://linear.app/speakeasy/issue/AGE-1718/remote-mcp-initial-api-endpoints Introduce CRUD endpoints for remote MCP servers under `/rpc/remoteMcpServers.*` (create, list, get, update, delete) with `remote-mcp:read` and `remote-mcp:write` RBAC scopes. Headers are stored as separate rows with per-value encryption for secrets and redaction in API responses. The update endpoint uses desired-state semantics for headers — clients send the full set and the server computes upserts/removals.
6529be7 to
bf1795c
Compare
https://linear.app/speakeasy/issue/AGE-1718/remote-mcp-initial-api-endpoints
Introduce CRUD endpoints for remote MCP servers under
/rpc/remoteMcp.*(createServer,listServers,getServer,updateServer,deleteServer) with newremote-mcp:read,remote-mcp:write, andremote-mcp:connectRBAC scopes and newremote-mcpresource type. Headers are stored as separate rows with per-value encryption for secrets and redaction in API responses. The update endpoint uses desired-state semantics for headers — clients send the full set and the server computes upserts/removals.