Junto Mcp

Created By
vrllrv4 months ago
The payment protocol for people and agents. One MCP server, any payment rail. Multi-provider routing (Woovi/Pix, Stripe, Belvo), spending guardrails, human-in-the-loop confirmation, and audit logging.
Overview

Junto

The payment protocol for people and agents.

Send and receive money through any AI assistant. Any payment rail. Built-in guardrails.

Named after Benjamin Franklin's Junto — a society of tradesmen who built civic infrastructure together. Different providers, same table, mutual benefit.


Why

AI assistants are starting to move real money — paying invoices, splitting bills, sending transfers. But every payment provider has a different API, different auth, different settlement times. Nobody should have to teach their assistant how Pix works vs Stripe vs Wise.

Junto fixes that with one MCP server that:

  • Exposes a universal payment toolkit to any MCP-compatible client (Claude, Cursor, custom agents)
  • Routes to the right provider based on currency, country, and rail
  • Enforces spending limits so agents can't go rogue
  • Supports human-in-the-loop confirmation for high-value transactions
  • Logs every action for audit and accountability

Tools

ToolDescription
paySend money to a destination (Pix key, email, IBAN, etc.)
chargeCreate a payment request / invoice / QR code
statusCheck payment status by correlation ID
refundReverse a completed transaction
balanceCheck available funds on a provider
providersList configured providers and their capabilities
limitsShow spending limits and today's usage

Quick Start

npm install -g junto-mcp

Set your provider API key:

export WOOVI_APP_ID="your-woovi-app-id"

Run:

junto-mcp

Add to Claude Desktop or Cursor

{
  "mcpServers": {
    "junto": {
      "command": "npx",
      "args": ["-y", "junto-mcp"],
      "env": {
        "WOOVI_APP_ID": "your-woovi-app-id"
      }
    }
  }
}

That's it. Your AI assistant now has payment tools.

Guardrails

All amounts are in cents (smallest currency unit).

SettingEnv VarDefaultMeaning
Daily limitJUNTO_DAILY_LIMIT50000 (R$500)Max total spend per day
Per-tx maxJUNTO_PER_TX_MAX20000 (R$200)Max single transaction
Confirm aboveJUNTO_CONFIRM_ABOVE5000 (R$50)Ask human before sending
Allowed providersJUNTO_ALLOWED_PROVIDERS(all)Comma-separated allowlist
Allowed destinationsJUNTO_ALLOWED_DESTINATIONS(all)Comma-separated type allowlist

When an agent tries to send above the JUNTO_CONFIRM_ABOVE threshold, the server pauses and returns a confirmation prompt. The agent must relay this to the user and get approval before proceeding.

⚠️ Confirmation required

  Amount:      BRL 150.00
  To:          maria@email.com
  Reason:      Amount (15000 cents) exceeds confirmation threshold (5000 cents)

Please confirm with the user before proceeding.

Architecture

┌─────────────────────────────────────┐
│  MCP Client (Claude, Cursor, etc.)  │
└──────────────┬──────────────────────┘
               │ MCP Protocol (stdio)
┌──────────────▼──────────────────────┐
│           junto-mcp                 │
│                                     │
│  ┌───────────┐  ┌────────────────┐  │
│  │  Router    │  │  Guardrails    │  │
│  │  (picks    │  │  (spend caps,  │  │
│  │  provider) │  │  HITL confirm, │  │
│  │           │  │  audit log)    │  │
│  └─────┬─────┘  └────────────────┘  │
│        │                            │
│  ┌─────▼─────────────────────────┐  │
│  │  Provider Adapters            │  │
│  │  ┌────────┐ ┌──────┐ ┌────┐  │  │
│  │  │ Woovi  │ │Stripe│ │Wise│  │  │
│  │  └────────┘ └──────┘ └────┘  │  │
│  └───────────────────────────────┘  │
│                                     │
│  ┌───────────────────────────────┐  │
│  │  Audit Ledger (JSONL)         │  │
│  └───────────────────────────────┘  │
└─────────────────────────────────────┘

Providers

ProviderRegionRailsStatus
Woovi/OpenPixBrazilPix🟢 Shipped
BelvoBrazilOpen Finance (all banks)🟡 Next
StripeGlobalCards, ACH, SEPA🟡 Next
WiseGlobalBank transfers🔴 Planned
Mercado PagoLATAMPix, Cards🔴 Planned
PayPalGlobalEmail-based🔴 Planned

Why Woovi/Pix first?

  • Pix settles instantly (perfect for demos and real use)
  • Brazil's Central Bank mandates open APIs for payments
  • 180M+ Pix users, 80B+ transactions in 2025
  • Pix Automático (launched June 2025) enables recurring payments
  • Low fees, no intermediaries

Demo

You:   "Pay R$25 to maria@email.com via Pix"

Agent:  I'll send the following payment:
          Amount: R$ 25,00
          To: maria@email.com (Pix)
          Via: Woovi
        Shall I go ahead?

You:   "Yes"

Agent:  Done! Payment sent.
          Amount: R$ 25,00
          To: maria@email.com
          Via: Pix (Woovi)
          Status: Completed
          ID: junto-1739612345-a1b2c3

Adding a Provider

Each provider is a single file implementing the PaymentProvider interface:

// src/providers/your-provider.ts
import { PaymentProvider } from "../types.js";

export class YourProvider implements PaymentProvider {
  name = "your-provider";
  supportedCurrencies = ["USD"];
  supportedRails = ["card"];
  settlementTime = "1-3 days";

  async pay(req) { /* send money */ }
  async charge(req) { /* create invoice */ }
  async status(id) { /* check status */ }
  async refund(id) { /* reverse payment */ }
  async balance() { /* check funds */ }
  info() { /* return capabilities */ }
}

Copy src/providers/_template.ts to get started, then register your provider in src/index.ts.

Testing

npm test

Runs guardrail tests covering: amount limits, daily budget tracking, confirmation thresholds, provider allowlists, and destination type filtering.

Audit Log

Every transaction is logged to ~/.junto/audit-YYYY-MM-DD.jsonl:

{
  "timestamp": "2026-02-15T14:32:07Z",
  "type": "payment",
  "action": "pay",
  "tool": "pay",
  "amount": 2500,
  "currency": "BRL",
  "provider": "woovi",
  "destination": "maria@email.com",
  "status": "executed"
}

Roadmap

  • Core MCP server with universal tool interface
  • Woovi/OpenPix provider (Pix)
  • Guardrails (daily limits, per-tx max, HITL confirmation)
  • Audit ledger
  • junto-skill (Claude behavioral layer)
  • Belvo provider (Open Finance — all Brazilian banks)
  • Stripe provider (Cards, ACH, SEPA)
  • junto-approve (Telegram/WhatsApp confirmation for HITL)
  • junto-dashboard (web UI for tx history and limits)
  • junto-compute (agent-to-agent budget delegation)
  • AP2 compatibility layer (Google Agent Payments Protocol)
  • Wise provider (international bank transfers)

Contributing

We need help with:

  • Provider adapters — Stripe, Wise, Belvo, Mercado Pago, PayPal, UPI
  • Routing logic — Cheapest vs fastest vs most reliable provider selection
  • HITL patterns — Approval flows across different MCP clients
  • Security audit — Review of the guardrails and auth system
  • Multi-currency — FX handling, cross-border routing
  • Docs — Compliance and regulatory guides per region

License

MIT

Server Config

{
  "mcpServers": {
    "junto-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "junto-mcp"
      ],
      "env": {
        "WOOVI_APP_ID": "your-woovi-app-id",
        "JUNTO_DAILY_LIMIT": "50000",
        "JUNTO_TX_MAX": "10000",
        "JUNTO_CONFIRM_ABOVE": "5000"
      }
    }
  }
}
Project Info
Created At
4 months ago
Updated At
3 months ago
Author Name
vrllrv
Star
-
Language
-
License
-
Category

Recommend Servers

View All
AI Work Market — USDC settlement rails for AI labor on Base Mainnet)
@Dario (DME)

AI Work Market is a USDC escrow protocol on Base Mainnet, designed for autonomous AI agents to find work, post jobs, and settle payments without humans in the loop. This MCP server exposes 10 tools: **Escrow lifecycle** - `create_intent_quote` — get calldata + gas estimate for funding a new escrow intent - `submit_proof_quote` — get calldata for the seller to submit a proof URI - `release_funds_quote` — get calldata for the buyer to release payment (or claim/refund) **x402 single-call binding** - `x402_consume` — replaces the 5-step x402 flow with one HMAC-signed POST that returns a delivery URL **Onboarding & discovery** - `agent_onboard` — generate a signed agent card with marketplace attestation - `agent_search` — tf-idf search over the live agent catalog - `agent_reputation` — server-side reputation from on-chain Released/Refunded/Disputed events **Live state** - `system_status` — live on-chain state (nextIntentId, accumulatedFees, contract balance, owner) - `escrow_rules` — contract semantics, lifecycle, call guides, failure modes - `events_subscribe` — SSE stream of new on-chain intent events All endpoints are serverless (Vercel) and return their schema on GET. No browser, no wallet UI required for an agent to integrate. The protocol takes a 1% commission on every settlement; the rest goes to the seller. The full AgentCard is at `/.well-known/agent-card.json` (A2A-compatible). The OpenAPI 3.0.3 spec is at `/.well-known/openapi.json` with `components.securitySchemes` (none, hmacX402). `robots.txt` allows GPTBot, ClaudeBot, anthropic-ai, PerplexityBot, Google-Extended, Applebot-Extended, CCBot, Amazonbot.

8 hours ago