jecp-server

Reference Hub implementation of the Joint Execution & Commerce Protocol (JECP).

LicenseStatusBuilt withSpec

A Rust + Axum Hub. Reference implementation of the JECP spec; the production Hub at https://jecp.dev runs on this exact source.

Indie operators: see the alpha readiness notice below before attempting cargo run.


What this Hub does

  • Agent registration & wallets/api/agents/* (top-up via Stripe Checkout, atomic per-call debit)
  • Provider onboarding/v1/providers/* (DNS verify, Stripe Connect Express in 47 countries)
  • Manifest publishing/v1/manifests (YAML manifests, validation, lifecycle promote/sunset)
  • Capability invocation/v1/invoke (Mandate enforcement, Trust Gate, idempotency, atomic billing 85/10/5)
  • Discovery/v1/capabilities (live catalog, includes both built-in and third-party)
  • Forwarding — HMAC-SHA256 signed requests to Provider endpoints with replay window

⚠️ Alpha readiness notice (2026-05-16)

The production Hub at jecp.dev runs on this exact source, but cargo run from a fresh clone is not yet supported. The binary boots only with all of:

  • a Supabase-schema Postgres (51 migrations applied)
  • Stripe Connect platform account + test mode
  • Anthropic API key
  • AWS KMS asymmetric key (ECDSA secp256k1) for the keeper
  • Sentry + Better Stack credentials
  • Cloudflare DNS zone for Provider DNS verification

We have not yet packaged this into a one-shot docker-compose; that's the v0.2 priority. See ROADMAP.md.

Until then, this repo is best used as a specification-conforming reference:

  • Read the Rust to see how the spec is implemented (src/routes/, src/auth/, src/protocol/).
  • Point a JECP SDK / CLI at the live Hub at https://jecp.dev instead of running your own.
  • Use @jecpdev/sdk or @jecpdev/cli for the agent / Provider integration path.

Architecture (for readers, not runners)

src/
├── main.rs # Axum router, middleware stack, Sentry
├── routes/
│ ├── invoke.rs # POST /v1/invoke — Mandate, Trust Gate, atomic billing, HMAC forward
│ ├── providers.rs # /v1/providers/{register,me,verify-dns,connect-stripe}
│ ├── manifests.rs # /v1/manifests publish + lifecycle (promote/sunset)
│ ├── capabilities.rs # /v1/capabilities (DB-driven catalog, core + third-party)
│ ├── agents.rs # /api/agents/{register,topup,share-kit}
│ └── health.rs
├── auth/ # API key bcrypt + Mandate + Trust Tier resolution
├── billing/ # invoke_charge() (atomic deduct + 85/10/5 split)
├── middleware/ # CORS, rate limit (60 RPM/agent), tracing
├── protocol/ # Wire format, error catalog with next_action
└── services/ # Postgres pool, Stripe API, signing, KMS-backed keeper

Specification

This server implements JECP Spec v1.1.1. RFC 2119 compliant, JSON Schema 2020-12.

Performance

Production numbers (p50 ~127ms on /v1/invoke cached path) hold on the Tufe-operated Hub at jecp.dev under live load.

These are not reproducible from a fresh clone — they depend on the Postgres schema, Stripe Connect accounts, and KMS keeper key that the Hub is provisioned against. A reproducible benchmark methodology + a self-hosted-friendly profile ship in v0.2 — see ROADMAP.md.

Client SDKs

  • TypeScript:@jecpdev/sdknpm install @jecpdev/sdk
  • Python: planned (v0.2)
  • Go: planned (v0.3)

The protocol is plain HTTP+JSON, so any language can implement directly. See the JECP spec.

Running your own Hub (today's reality)

For now, the realistic path is to use the hosted Hub at jecp.dev (it's the only fully-provisioned deployment of this reference).

If you already have all 6 dependencies in the Alpha readiness notice above and want to self-host today, your starting points are:

  1. fly.toml — current production Fly.io config (retarget the app name + secrets)
  2. Dockerfile — current production container build
  3. spec/openapi.yaml — OpenAPI 3.1 schema if you want to start fresh in another language

The protocol is multi-vendor and federation-ready by design; the federation registry itself ships in Q4 (ROADMAP.md).

License

Apache License 2.0

Copyright 2026 Tufe Company Inc. and JECP contributors.

About

Reference implementation of JECP. Rust + Axum. Production-ready.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

jecp-server

Reference Hub implementation of the Joint Execution & Commerce Protocol (JECP).

LicenseStatusBuilt withSpec

A Rust + Axum Hub. Reference implementation of the JECP spec; the production Hub at https://jecp.dev runs on this exact source.

Indie operators: see the alpha readiness notice below before attempting cargo run.


What this Hub does

  • Agent registration & wallets/api/agents/* (top-up via Stripe Checkout, atomic per-call debit)
  • Provider onboarding/v1/providers/* (DNS verify, Stripe Connect Express in 47 countries)
  • Manifest publishing/v1/manifests (YAML manifests, validation, lifecycle promote/sunset)
  • Capability invocation/v1/invoke (Mandate enforcement, Trust Gate, idempotency, atomic billing 85/10/5)
  • Discovery/v1/capabilities (live catalog, includes both built-in and third-party)
  • Forwarding — HMAC-SHA256 signed requests to Provider endpoints with replay window

⚠️ Alpha readiness notice (2026-05-16)

The production Hub at jecp.dev runs on this exact source, but cargo run from a fresh clone is not yet supported. The binary boots only with all of:

  • a Supabase-schema Postgres (51 migrations applied)
  • Stripe Connect platform account + test mode
  • Anthropic API key
  • AWS KMS asymmetric key (ECDSA secp256k1) for the keeper
  • Sentry + Better Stack credentials
  • Cloudflare DNS zone for Provider DNS verification

We have not yet packaged this into a one-shot docker-compose; that's the v0.2 priority. See ROADMAP.md.

Until then, this repo is best used as a specification-conforming reference:

  • Read the Rust to see how the spec is implemented (src/routes/, src/auth/, src/protocol/).
  • Point a JECP SDK / CLI at the live Hub at https://jecp.dev instead of running your own.
  • Use @jecpdev/sdk or @jecpdev/cli for the agent / Provider integration path.

Architecture (for readers, not runners)

src/
├── main.rs # Axum router, middleware stack, Sentry
├── routes/
│ ├── invoke.rs # POST /v1/invoke — Mandate, Trust Gate, atomic billing, HMAC forward
│ ├── providers.rs # /v1/providers/{register,me,verify-dns,connect-stripe}
│ ├── manifests.rs # /v1/manifests publish + lifecycle (promote/sunset)
│ ├── capabilities.rs # /v1/capabilities (DB-driven catalog, core + third-party)
│ ├── agents.rs # /api/agents/{register,topup,share-kit}
│ └── health.rs
├── auth/ # API key bcrypt + Mandate + Trust Tier resolution
├── billing/ # invoke_charge() (atomic deduct + 85/10/5 split)
├── middleware/ # CORS, rate limit (60 RPM/agent), tracing
├── protocol/ # Wire format, error catalog with next_action
└── services/ # Postgres pool, Stripe API, signing, KMS-backed keeper

Specification

This server implements JECP Spec v1.1.1. RFC 2119 compliant, JSON Schema 2020-12.

Performance

Production numbers (p50 ~127ms on /v1/invoke cached path) hold on the Tufe-operated Hub at jecp.dev under live load.

These are not reproducible from a fresh clone — they depend on the Postgres schema, Stripe Connect accounts, and KMS keeper key that the Hub is provisioned against. A reproducible benchmark methodology + a self-hosted-friendly profile ship in v0.2 — see ROADMAP.md.

Client SDKs

  • TypeScript:@jecpdev/sdknpm install @jecpdev/sdk
  • Python: planned (v0.2)
  • Go: planned (v0.3)

The protocol is plain HTTP+JSON, so any language can implement directly. See the JECP spec.

Running your own Hub (today's reality)

For now, the realistic path is to use the hosted Hub at jecp.dev (it's the only fully-provisioned deployment of this reference).

If you already have all 6 dependencies in the Alpha readiness notice above and want to self-host today, your starting points are:

  1. fly.toml — current production Fly.io config (retarget the app name + secrets)
  2. Dockerfile — current production container build
  3. spec/openapi.yaml — OpenAPI 3.1 schema if you want to start fresh in another language

The protocol is multi-vendor and federation-ready by design; the federation registry itself ships in Q4 (ROADMAP.md).

License

Apache License 2.0

Copyright 2026 Tufe Company Inc. and JECP contributors.

About

Reference implementation of JECP. Rust + Axum. Production-ready.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

jecp-server

Reference Hub implementation of the Joint Execution & Commerce Protocol (JECP).

LicenseStatusBuilt withSpec

A Rust + Axum Hub. Reference implementation of the JECP spec; the production Hub at https://jecp.dev runs on this exact source.

Indie operators: see the alpha readiness notice below before attempting cargo run.


What this Hub does

  • Agent registration & wallets/api/agents/* (top-up via Stripe Checkout, atomic per-call debit)
  • Provider onboarding/v1/providers/* (DNS verify, Stripe Connect Express in 47 countries)
  • Manifest publishing/v1/manifests (YAML manifests, validation, lifecycle promote/sunset)
  • Capability invocation/v1/invoke (Mandate enforcement, Trust Gate, idempotency, atomic billing 85/10/5)
  • Discovery/v1/capabilities (live catalog, includes both built-in and third-party)
  • Forwarding — HMAC-SHA256 signed requests to Provider endpoints with replay window

⚠️ Alpha readiness notice (2026-05-16)

The production Hub at jecp.dev runs on this exact source, but cargo run from a fresh clone is not yet supported. The binary boots only with all of:

  • a Supabase-schema Postgres (51 migrations applied)
  • Stripe Connect platform account + test mode
  • Anthropic API key
  • AWS KMS asymmetric key (ECDSA secp256k1) for the keeper
  • Sentry + Better Stack credentials
  • Cloudflare DNS zone for Provider DNS verification

We have not yet packaged this into a one-shot docker-compose; that's the v0.2 priority. See ROADMAP.md.

Until then, this repo is best used as a specification-conforming reference:

  • Read the Rust to see how the spec is implemented (src/routes/, src/auth/, src/protocol/).
  • Point a JECP SDK / CLI at the live Hub at https://jecp.dev instead of running your own.
  • Use @jecpdev/sdk or @jecpdev/cli for the agent / Provider integration path.

Architecture (for readers, not runners)

src/
├── main.rs # Axum router, middleware stack, Sentry
├── routes/
│ ├── invoke.rs # POST /v1/invoke — Mandate, Trust Gate, atomic billing, HMAC forward
│ ├── providers.rs # /v1/providers/{register,me,verify-dns,connect-stripe}
│ ├── manifests.rs # /v1/manifests publish + lifecycle (promote/sunset)
│ ├── capabilities.rs # /v1/capabilities (DB-driven catalog, core + third-party)
│ ├── agents.rs # /api/agents/{register,topup,share-kit}
│ └── health.rs
├── auth/ # API key bcrypt + Mandate + Trust Tier resolution
├── billing/ # invoke_charge() (atomic deduct + 85/10/5 split)
├── middleware/ # CORS, rate limit (60 RPM/agent), tracing
├── protocol/ # Wire format, error catalog with next_action
└── services/ # Postgres pool, Stripe API, signing, KMS-backed keeper

Specification

This server implements JECP Spec v1.1.1. RFC 2119 compliant, JSON Schema 2020-12.

Performance

Production numbers (p50 ~127ms on /v1/invoke cached path) hold on the Tufe-operated Hub at jecp.dev under live load.

These are not reproducible from a fresh clone — they depend on the Postgres schema, Stripe Connect accounts, and KMS keeper key that the Hub is provisioned against. A reproducible benchmark methodology + a self-hosted-friendly profile ship in v0.2 — see ROADMAP.md.

Client SDKs

  • TypeScript:@jecpdev/sdknpm install @jecpdev/sdk
  • Python: planned (v0.2)
  • Go: planned (v0.3)

The protocol is plain HTTP+JSON, so any language can implement directly. See the JECP spec.

Running your own Hub (today's reality)

For now, the realistic path is to use the hosted Hub at jecp.dev (it's the only fully-provisioned deployment of this reference).

If you already have all 6 dependencies in the Alpha readiness notice above and want to self-host today, your starting points are:

  1. fly.toml — current production Fly.io config (retarget the app name + secrets)
  2. Dockerfile — current production container build
  3. spec/openapi.yaml — OpenAPI 3.1 schema if you want to start fresh in another language

The protocol is multi-vendor and federation-ready by design; the federation registry itself ships in Q4 (ROADMAP.md).

License

Apache License 2.0

Copyright 2026 Tufe Company Inc. and JECP contributors.

About

Reference implementation of JECP. Rust + Axum. Production-ready.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

jecp-server

Reference Hub implementation of the Joint Execution & Commerce Protocol (JECP).

LicenseStatusBuilt withSpec

A Rust + Axum Hub. Reference implementation of the JECP spec; the production Hub at https://jecp.dev runs on this exact source.

Indie operators: see the alpha readiness notice below before attempting cargo run.


What this Hub does

  • Agent registration & wallets/api/agents/* (top-up via Stripe Checkout, atomic per-call debit)
  • Provider onboarding/v1/providers/* (DNS verify, Stripe Connect Express in 47 countries)
  • Manifest publishing/v1/manifests (YAML manifests, validation, lifecycle promote/sunset)
  • Capability invocation/v1/invoke (Mandate enforcement, Trust Gate, idempotency, atomic billing 85/10/5)
  • Discovery/v1/capabilities (live catalog, includes both built-in and third-party)
  • Forwarding — HMAC-SHA256 signed requests to Provider endpoints with replay window

⚠️ Alpha readiness notice (2026-05-16)

The production Hub at jecp.dev runs on this exact source, but cargo run from a fresh clone is not yet supported. The binary boots only with all of:

  • a Supabase-schema Postgres (51 migrations applied)
  • Stripe Connect platform account + test mode
  • Anthropic API key
  • AWS KMS asymmetric key (ECDSA secp256k1) for the keeper
  • Sentry + Better Stack credentials
  • Cloudflare DNS zone for Provider DNS verification

We have not yet packaged this into a one-shot docker-compose; that's the v0.2 priority. See ROADMAP.md.

Until then, this repo is best used as a specification-conforming reference:

  • Read the Rust to see how the spec is implemented (src/routes/, src/auth/, src/protocol/).
  • Point a JECP SDK / CLI at the live Hub at https://jecp.dev instead of running your own.
  • Use @jecpdev/sdk or @jecpdev/cli for the agent / Provider integration path.

Architecture (for readers, not runners)

src/
├── main.rs # Axum router, middleware stack, Sentry
├── routes/
│ ├── invoke.rs # POST /v1/invoke — Mandate, Trust Gate, atomic billing, HMAC forward
│ ├── providers.rs # /v1/providers/{register,me,verify-dns,connect-stripe}
│ ├── manifests.rs # /v1/manifests publish + lifecycle (promote/sunset)
│ ├── capabilities.rs # /v1/capabilities (DB-driven catalog, core + third-party)
│ ├── agents.rs # /api/agents/{register,topup,share-kit}
│ └── health.rs
├── auth/ # API key bcrypt + Mandate + Trust Tier resolution
├── billing/ # invoke_charge() (atomic deduct + 85/10/5 split)
├── middleware/ # CORS, rate limit (60 RPM/agent), tracing
├── protocol/ # Wire format, error catalog with next_action
└── services/ # Postgres pool, Stripe API, signing, KMS-backed keeper

Specification

This server implements JECP Spec v1.1.1. RFC 2119 compliant, JSON Schema 2020-12.

Performance

Production numbers (p50 ~127ms on /v1/invoke cached path) hold on the Tufe-operated Hub at jecp.dev under live load.

These are not reproducible from a fresh clone — they depend on the Postgres schema, Stripe Connect accounts, and KMS keeper key that the Hub is provisioned against. A reproducible benchmark methodology + a self-hosted-friendly profile ship in v0.2 — see ROADMAP.md.

Client SDKs

  • TypeScript:@jecpdev/sdknpm install @jecpdev/sdk
  • Python: planned (v0.2)
  • Go: planned (v0.3)

The protocol is plain HTTP+JSON, so any language can implement directly. See the JECP spec.

Running your own Hub (today's reality)

For now, the realistic path is to use the hosted Hub at jecp.dev (it's the only fully-provisioned deployment of this reference).

If you already have all 6 dependencies in the Alpha readiness notice above and want to self-host today, your starting points are:

  1. fly.toml — current production Fly.io config (retarget the app name + secrets)
  2. Dockerfile — current production container build
  3. spec/openapi.yaml — OpenAPI 3.1 schema if you want to start fresh in another language

The protocol is multi-vendor and federation-ready by design; the federation registry itself ships in Q4 (ROADMAP.md).

License

Apache License 2.0

Copyright 2026 Tufe Company Inc. and JECP contributors.

About

Reference implementation of JECP. Rust + Axum. Production-ready.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

jecp-server

Reference Hub implementation of the Joint Execution & Commerce Protocol (JECP).

LicenseStatusBuilt withSpec

A Rust + Axum Hub. Reference implementation of the JECP spec; the production Hub at https://jecp.dev runs on this exact source.

Indie operators: see the alpha readiness notice below before attempting cargo run.


What this Hub does

  • Agent registration & wallets/api/agents/* (top-up via Stripe Checkout, atomic per-call debit)
  • Provider onboarding/v1/providers/* (DNS verify, Stripe Connect Express in 47 countries)
  • Manifest publishing/v1/manifests (YAML manifests, validation, lifecycle promote/sunset)
  • Capability invocation/v1/invoke (Mandate enforcement, Trust Gate, idempotency, atomic billing 85/10/5)
  • Discovery/v1/capabilities (live catalog, includes both built-in and third-party)
  • Forwarding — HMAC-SHA256 signed requests to Provider endpoints with replay window

⚠️ Alpha readiness notice (2026-05-16)

The production Hub at jecp.dev runs on this exact source, but cargo run from a fresh clone is not yet supported. The binary boots only with all of:

  • a Supabase-schema Postgres (51 migrations applied)
  • Stripe Connect platform account + test mode
  • Anthropic API key
  • AWS KMS asymmetric key (ECDSA secp256k1) for the keeper
  • Sentry + Better Stack credentials
  • Cloudflare DNS zone for Provider DNS verification

We have not yet packaged this into a one-shot docker-compose; that's the v0.2 priority. See ROADMAP.md.

Until then, this repo is best used as a specification-conforming reference:

  • Read the Rust to see how the spec is implemented (src/routes/, src/auth/, src/protocol/).
  • Point a JECP SDK / CLI at the live Hub at https://jecp.dev instead of running your own.
  • Use @jecpdev/sdk or @jecpdev/cli for the agent / Provider integration path.

Architecture (for readers, not runners)

src/
├── main.rs # Axum router, middleware stack, Sentry
├── routes/
│ ├── invoke.rs # POST /v1/invoke — Mandate, Trust Gate, atomic billing, HMAC forward
│ ├── providers.rs # /v1/providers/{register,me,verify-dns,connect-stripe}
│ ├── manifests.rs # /v1/manifests publish + lifecycle (promote/sunset)
│ ├── capabilities.rs # /v1/capabilities (DB-driven catalog, core + third-party)
│ ├── agents.rs # /api/agents/{register,topup,share-kit}
│ └── health.rs
├── auth/ # API key bcrypt + Mandate + Trust Tier resolution
├── billing/ # invoke_charge() (atomic deduct + 85/10/5 split)
├── middleware/ # CORS, rate limit (60 RPM/agent), tracing
├── protocol/ # Wire format, error catalog with next_action
└── services/ # Postgres pool, Stripe API, signing, KMS-backed keeper

Specification

This server implements JECP Spec v1.1.1. RFC 2119 compliant, JSON Schema 2020-12.

Performance

Production numbers (p50 ~127ms on /v1/invoke cached path) hold on the Tufe-operated Hub at jecp.dev under live load.

These are not reproducible from a fresh clone — they depend on the Postgres schema, Stripe Connect accounts, and KMS keeper key that the Hub is provisioned against. A reproducible benchmark methodology + a self-hosted-friendly profile ship in v0.2 — see ROADMAP.md.

Client SDKs

  • TypeScript:@jecpdev/sdknpm install @jecpdev/sdk
  • Python: planned (v0.2)
  • Go: planned (v0.3)

The protocol is plain HTTP+JSON, so any language can implement directly. See the JECP spec.

Running your own Hub (today's reality)

For now, the realistic path is to use the hosted Hub at jecp.dev (it's the only fully-provisioned deployment of this reference).

If you already have all 6 dependencies in the Alpha readiness notice above and want to self-host today, your starting points are:

  1. fly.toml — current production Fly.io config (retarget the app name + secrets)
  2. Dockerfile — current production container build
  3. spec/openapi.yaml — OpenAPI 3.1 schema if you want to start fresh in another language

The protocol is multi-vendor and federation-ready by design; the federation registry itself ships in Q4 (ROADMAP.md).

License

Apache License 2.0

Copyright 2026 Tufe Company Inc. and JECP contributors.

About

Reference implementation of JECP. Rust + Axum. Production-ready.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

jecp-server

Reference Hub implementation of the Joint Execution & Commerce Protocol (JECP).

LicenseStatusBuilt withSpec

A Rust + Axum Hub. Reference implementation of the JECP spec; the production Hub at https://jecp.dev runs on this exact source.

Indie operators: see the alpha readiness notice below before attempting cargo run.


What this Hub does

  • Agent registration & wallets/api/agents/* (top-up via Stripe Checkout, atomic per-call debit)
  • Provider onboarding/v1/providers/* (DNS verify, Stripe Connect Express in 47 countries)
  • Manifest publishing/v1/manifests (YAML manifests, validation, lifecycle promote/sunset)
  • Capability invocation/v1/invoke (Mandate enforcement, Trust Gate, idempotency, atomic billing 85/10/5)
  • Discovery/v1/capabilities (live catalog, includes both built-in and third-party)
  • Forwarding — HMAC-SHA256 signed requests to Provider endpoints with replay window

⚠️ Alpha readiness notice (2026-05-16)

The production Hub at jecp.dev runs on this exact source, but cargo run from a fresh clone is not yet supported. The binary boots only with all of:

  • a Supabase-schema Postgres (51 migrations applied)
  • Stripe Connect platform account + test mode
  • Anthropic API key
  • AWS KMS asymmetric key (ECDSA secp256k1) for the keeper
  • Sentry + Better Stack credentials
  • Cloudflare DNS zone for Provider DNS verification

We have not yet packaged this into a one-shot docker-compose; that's the v0.2 priority. See ROADMAP.md.

Until then, this repo is best used as a specification-conforming reference:

  • Read the Rust to see how the spec is implemented (src/routes/, src/auth/, src/protocol/).
  • Point a JECP SDK / CLI at the live Hub at https://jecp.dev instead of running your own.
  • Use @jecpdev/sdk or @jecpdev/cli for the agent / Provider integration path.

Architecture (for readers, not runners)

src/
├── main.rs # Axum router, middleware stack, Sentry
├── routes/
│ ├── invoke.rs # POST /v1/invoke — Mandate, Trust Gate, atomic billing, HMAC forward
│ ├── providers.rs # /v1/providers/{register,me,verify-dns,connect-stripe}
│ ├── manifests.rs # /v1/manifests publish + lifecycle (promote/sunset)
│ ├── capabilities.rs # /v1/capabilities (DB-driven catalog, core + third-party)
│ ├── agents.rs # /api/agents/{register,topup,share-kit}
│ └── health.rs
├── auth/ # API key bcrypt + Mandate + Trust Tier resolution
├── billing/ # invoke_charge() (atomic deduct + 85/10/5 split)
├── middleware/ # CORS, rate limit (60 RPM/agent), tracing
├── protocol/ # Wire format, error catalog with next_action
└── services/ # Postgres pool, Stripe API, signing, KMS-backed keeper

Specification

This server implements JECP Spec v1.1.1. RFC 2119 compliant, JSON Schema 2020-12.

Performance

Production numbers (p50 ~127ms on /v1/invoke cached path) hold on the Tufe-operated Hub at jecp.dev under live load.

These are not reproducible from a fresh clone — they depend on the Postgres schema, Stripe Connect accounts, and KMS keeper key that the Hub is provisioned against. A reproducible benchmark methodology + a self-hosted-friendly profile ship in v0.2 — see ROADMAP.md.

Client SDKs

  • TypeScript:@jecpdev/sdknpm install @jecpdev/sdk
  • Python: planned (v0.2)
  • Go: planned (v0.3)

The protocol is plain HTTP+JSON, so any language can implement directly. See the JECP spec.

Running your own Hub (today's reality)

For now, the realistic path is to use the hosted Hub at jecp.dev (it's the only fully-provisioned deployment of this reference).

If you already have all 6 dependencies in the Alpha readiness notice above and want to self-host today, your starting points are:

  1. fly.toml — current production Fly.io config (retarget the app name + secrets)
  2. Dockerfile — current production container build
  3. spec/openapi.yaml — OpenAPI 3.1 schema if you want to start fresh in another language

The protocol is multi-vendor and federation-ready by design; the federation registry itself ships in Q4 (ROADMAP.md).

License

Apache License 2.0

Copyright 2026 Tufe Company Inc. and JECP contributors.

About

Reference implementation of JECP. Rust + Axum. Production-ready.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

jecp-server

Reference Hub implementation of the Joint Execution & Commerce Protocol (JECP).

LicenseStatusBuilt withSpec

A Rust + Axum Hub. Reference implementation of the JECP spec; the production Hub at https://jecp.dev runs on this exact source.

Indie operators: see the alpha readiness notice below before attempting cargo run.


What this Hub does

  • Agent registration & wallets/api/agents/* (top-up via Stripe Checkout, atomic per-call debit)
  • Provider onboarding/v1/providers/* (DNS verify, Stripe Connect Express in 47 countries)
  • Manifest publishing/v1/manifests (YAML manifests, validation, lifecycle promote/sunset)
  • Capability invocation/v1/invoke (Mandate enforcement, Trust Gate, idempotency, atomic billing 85/10/5)
  • Discovery/v1/capabilities (live catalog, includes both built-in and third-party)
  • Forwarding — HMAC-SHA256 signed requests to Provider endpoints with replay window

⚠️ Alpha readiness notice (2026-05-16)

The production Hub at jecp.dev runs on this exact source, but cargo run from a fresh clone is not yet supported. The binary boots only with all of:

  • a Supabase-schema Postgres (51 migrations applied)
  • Stripe Connect platform account + test mode
  • Anthropic API key
  • AWS KMS asymmetric key (ECDSA secp256k1) for the keeper
  • Sentry + Better Stack credentials
  • Cloudflare DNS zone for Provider DNS verification

We have not yet packaged this into a one-shot docker-compose; that's the v0.2 priority. See ROADMAP.md.

Until then, this repo is best used as a specification-conforming reference:

  • Read the Rust to see how the spec is implemented (src/routes/, src/auth/, src/protocol/).
  • Point a JECP SDK / CLI at the live Hub at https://jecp.dev instead of running your own.
  • Use @jecpdev/sdk or @jecpdev/cli for the agent / Provider integration path.

Architecture (for readers, not runners)

src/
├── main.rs # Axum router, middleware stack, Sentry
├── routes/
│ ├── invoke.rs # POST /v1/invoke — Mandate, Trust Gate, atomic billing, HMAC forward
│ ├── providers.rs # /v1/providers/{register,me,verify-dns,connect-stripe}
│ ├── manifests.rs # /v1/manifests publish + lifecycle (promote/sunset)
│ ├── capabilities.rs # /v1/capabilities (DB-driven catalog, core + third-party)
│ ├── agents.rs # /api/agents/{register,topup,share-kit}
│ └── health.rs
├── auth/ # API key bcrypt + Mandate + Trust Tier resolution
├── billing/ # invoke_charge() (atomic deduct + 85/10/5 split)
├── middleware/ # CORS, rate limit (60 RPM/agent), tracing
├── protocol/ # Wire format, error catalog with next_action
└── services/ # Postgres pool, Stripe API, signing, KMS-backed keeper

Specification

This server implements JECP Spec v1.1.1. RFC 2119 compliant, JSON Schema 2020-12.

Performance

Production numbers (p50 ~127ms on /v1/invoke cached path) hold on the Tufe-operated Hub at jecp.dev under live load.

These are not reproducible from a fresh clone — they depend on the Postgres schema, Stripe Connect accounts, and KMS keeper key that the Hub is provisioned against. A reproducible benchmark methodology + a self-hosted-friendly profile ship in v0.2 — see ROADMAP.md.

Client SDKs

  • TypeScript:@jecpdev/sdknpm install @jecpdev/sdk
  • Python: planned (v0.2)
  • Go: planned (v0.3)

The protocol is plain HTTP+JSON, so any language can implement directly. See the JECP spec.

Running your own Hub (today's reality)

For now, the realistic path is to use the hosted Hub at jecp.dev (it's the only fully-provisioned deployment of this reference).

If you already have all 6 dependencies in the Alpha readiness notice above and want to self-host today, your starting points are:

  1. fly.toml — current production Fly.io config (retarget the app name + secrets)
  2. Dockerfile — current production container build
  3. spec/openapi.yaml — OpenAPI 3.1 schema if you want to start fresh in another language

The protocol is multi-vendor and federation-ready by design; the federation registry itself ships in Q4 (ROADMAP.md).

License

Apache License 2.0

Copyright 2026 Tufe Company Inc. and JECP contributors.

About

Reference implementation of JECP. Rust + Axum. Production-ready.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

jecp-server

Reference Hub implementation of the Joint Execution & Commerce Protocol (JECP).

LicenseStatusBuilt withSpec

A Rust + Axum Hub. Reference implementation of the JECP spec; the production Hub at https://jecp.dev runs on this exact source.

Indie operators: see the alpha readiness notice below before attempting cargo run.


What this Hub does

  • Agent registration & wallets/api/agents/* (top-up via Stripe Checkout, atomic per-call debit)
  • Provider onboarding/v1/providers/* (DNS verify, Stripe Connect Express in 47 countries)
  • Manifest publishing/v1/manifests (YAML manifests, validation, lifecycle promote/sunset)
  • Capability invocation/v1/invoke (Mandate enforcement, Trust Gate, idempotency, atomic billing 85/10/5)
  • Discovery/v1/capabilities (live catalog, includes both built-in and third-party)
  • Forwarding — HMAC-SHA256 signed requests to Provider endpoints with replay window

⚠️ Alpha readiness notice (2026-05-16)

The production Hub at jecp.dev runs on this exact source, but cargo run from a fresh clone is not yet supported. The binary boots only with all of:

  • a Supabase-schema Postgres (51 migrations applied)
  • Stripe Connect platform account + test mode
  • Anthropic API key
  • AWS KMS asymmetric key (ECDSA secp256k1) for the keeper
  • Sentry + Better Stack credentials
  • Cloudflare DNS zone for Provider DNS verification

We have not yet packaged this into a one-shot docker-compose; that's the v0.2 priority. See ROADMAP.md.

Until then, this repo is best used as a specification-conforming reference:

  • Read the Rust to see how the spec is implemented (src/routes/, src/auth/, src/protocol/).
  • Point a JECP SDK / CLI at the live Hub at https://jecp.dev instead of running your own.
  • Use @jecpdev/sdk or @jecpdev/cli for the agent / Provider integration path.

Architecture (for readers, not runners)

src/
├── main.rs # Axum router, middleware stack, Sentry
├── routes/
│ ├── invoke.rs # POST /v1/invoke — Mandate, Trust Gate, atomic billing, HMAC forward
│ ├── providers.rs # /v1/providers/{register,me,verify-dns,connect-stripe}
│ ├── manifests.rs # /v1/manifests publish + lifecycle (promote/sunset)
│ ├── capabilities.rs # /v1/capabilities (DB-driven catalog, core + third-party)
│ ├── agents.rs # /api/agents/{register,topup,share-kit}
│ └── health.rs
├── auth/ # API key bcrypt + Mandate + Trust Tier resolution
├── billing/ # invoke_charge() (atomic deduct + 85/10/5 split)
├── middleware/ # CORS, rate limit (60 RPM/agent), tracing
├── protocol/ # Wire format, error catalog with next_action
└── services/ # Postgres pool, Stripe API, signing, KMS-backed keeper

Specification

This server implements JECP Spec v1.1.1. RFC 2119 compliant, JSON Schema 2020-12.

Performance

Production numbers (p50 ~127ms on /v1/invoke cached path) hold on the Tufe-operated Hub at jecp.dev under live load.

These are not reproducible from a fresh clone — they depend on the Postgres schema, Stripe Connect accounts, and KMS keeper key that the Hub is provisioned against. A reproducible benchmark methodology + a self-hosted-friendly profile ship in v0.2 — see ROADMAP.md.

Client SDKs

  • TypeScript:@jecpdev/sdknpm install @jecpdev/sdk
  • Python: planned (v0.2)
  • Go: planned (v0.3)

The protocol is plain HTTP+JSON, so any language can implement directly. See the JECP spec.

Running your own Hub (today's reality)

For now, the realistic path is to use the hosted Hub at jecp.dev (it's the only fully-provisioned deployment of this reference).

If you already have all 6 dependencies in the Alpha readiness notice above and want to self-host today, your starting points are:

  1. fly.toml — current production Fly.io config (retarget the app name + secrets)
  2. Dockerfile — current production container build
  3. spec/openapi.yaml — OpenAPI 3.1 schema if you want to start fresh in another language

The protocol is multi-vendor and federation-ready by design; the federation registry itself ships in Q4 (ROADMAP.md).

License

Apache License 2.0

Copyright 2026 Tufe Company Inc. and JECP contributors.

About

Reference implementation of JECP. Rust + Axum. Production-ready.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages