feat: v1.2 MCP off-ramp tools + reputation contract (#226 #227 #228 #229)#379
Merged
ezedike-evan merged 4 commits intoJun 2, 2026
Merged
Conversation
|
@Salmatcre8 is attempting to deploy a commit to the ezedikeevan's projects Team on Vercel. A member of the Team first needs to authorize it. |
…ter-seeds # Conflicts: # package-lock.json # package.json
|
@Salmatcre8 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
added 2 commits
June 1, 2026 19:30
…#226-229) Bumps tsconfig target ES2017→ES2020 to support BigInt literals already used in lib/router/solve.ts and lib/mcp/offramp.ts.
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.
Summary
Implements the v1.2 INTENT ROUTER + SEEDS milestone: two MCP off-ramp tools, a subprocess round-trip test, and the on-chain reputation contract seed.
Closes #226
Closes #227
Closes #228
Closes #229
What's included
MCP off-ramp tools (#226
quote, #227prepare)The repo is a Next.js app (no
packages/workspace), so the MCP server lives inscripts/mcp/with a shared, framework-free core inlib/mcp/offramp.tsthat reuses the existing router/anchor routing and canonicalhashIntentlogic.intel.offramp.quote— input{ from, to, amount }→{ anchor, quoteId, netReceived, expiresAt }; schema-validated, BigInt decimal math (no float drift).intel.offramp.prepare— input: an unsigned intent →{ unsignedEnvelope: { intent, intentHash }, unsignedTx }.intentHashis the canonical SHA-256 an agent signs;unsignedTxis a real unsigned Stellar payment XDR.@modelcontextprotocol/sdk(added) as a proper stdio MCP server (scripts/mcp/server.ts). Server applies safe mainnet env defaults so agents don't need the web app's.env.Subprocess round-trip test (#228)
tests/mcp-e2e.spec.tsspawns the server as a child process via the MCP stdio client and exercises both tools, asserting valid responses, error surfacing without crashing, and a clean exit.Soroban reputation contract (#229)
contracts/reputation/— admin-managed anchor registry:init(admin),register_anchor(admin, anchor_id),list_anchors(), plus anadmin()getter. Admin authority viarequire_auth, typed#[contracterror]errors, duplicate protection.Verified terminal output
TypeScript tools + e2e (vitest):
Includes the #136 acceptance check: "the returned envelope signs correctly with a provided keypair" (Keypair.sign over intentHash verifies against the sender key).
Soroban contract — unit tests + build (verified locally with cargo 1.94 + stellar-cli 25.2):
Notes
packages/mcp/...and a monorepo layout that doesn't exist in this repo; I placed the server underscripts/mcp/and the shared core underlib/mcp/to fit the actual Next.js structure while preserving the exact tool names and I/O schemas from the issues.docs/MCP.mddescribes running the server and both tools.main(unrelated SEP-1/SEP-10/SEP-24/component/e2e specs); this PR adds 15 passing tests and introduces none.Acceptance criteria