
Contribution Exchange
com.signalafv1.0.0Updated Sep 29, 2026
Contribution Exchange MCP: domain discovery, policies, preflight, proposals, and signals.
Installation
In SourceWeft
- Open Contribution Exchange in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Other MCP clients
Add this to your client's mcpServers config.
{
"mcpServers": {
"contribution-exchange": {
"type": "http",
"url": "https://signalaf.com/api/exchange/mcp"
}
}
}README
SignalAF — Upsilon Measurement Engine + SigRank Proof Surface
Upsilon is the privacy-preserving measurement engine. SigRank is the public leaderboard and proof surface at signalaf.com. Run
npx sigrankto calculate Yield from four token counts. Never prompts or code.
[SigRank SignalAF — AI operator evaluation and token cascade efficiency leaderboard]
Upsilon measures. SigRank proves. MO§ES™ governs. SignalAF is the brand.
SigRank evaluates the human using the AI, not the AI model itself. Most platforms reward volume. SigRank SignalAF rewards structure.
[CI] [CodeQL] [audit] [Dependabot] [coverage] [Lighthouse] [E2E] [live] [npm] [npm downloads] [GitHub stars] [deploy] [Next.js] [React] [TypeScript] [Supabase] [Stripe] [license]
[npx sigrank] [Star this repo]
Table of Contents
- What is SignalAF?
- The SigRank SignalAF ecosystem
- Get ranked (you don't need this repo)
- How it works
- For developers
- Stack
- Quick Start
- Scripts
- Project Map
- Data Model
- Environment
- Supabase
- Scoring Invariants
- Development Notes
- Related
- Community
- License
What is SignalAF?
SignalAF is the umbrella brand for Upsilon and SigRank. Upsilon is the AI operator measurement engine; SigRank is the public leaderboard. Upsilon measures token cascade efficiency, not AI models. It describes token-processing patterns: how much reusable signal they create from each unit of input, not how many tokens they burn. The rank metric:
The board is anonymous by default, claimable by operators, and built around one question: is this session compounding signal, or just burning tokens? Volume is noise; yield is signal.
This repo is the Next.js implementation behind signalaf.com; the Upsilon measurement engine plus the SigRank public board, profiles, wiki, account, billing, and ingest surfaces.
The compatibility record remains versioned as sigrank/0.1-draft; product naming
does not silently rewrite installed packages, tool names, schemas, or stored records.
The SigRank SignalAF ecosystem
Also in the MO§ES™ suite
Get ranked (you don't need this repo)
SigRank SignalAF runs from your terminal. Or wire it as an MCP server for your AI agent:
The client reads your local AI session logs on-device, derives your cascade, and publishes to the board, token-only, no transcript content.
Or explore first, no sign-in:
Cautious? sigrank submit --dry-run prints the exact signed payload (four token
counts and a signature) and sends nothing.
Full CLI + MCP docs: sigrank-mcp · package: sigrank on npm.
How it works
- Four raw token pillars —
input,output,cache_creation,cache_read— are the only inputs. No message content, ever. - The cascade engine derives Υ Yield, Leverage, Velocity, 10xDEV, SNR, and efficiency from those four numbers. The server re-scores every submission authoritatively.
- Operators are placed in signal classes (Transmitter, Architect, …) by their cascade shape, and ranked globally by Υ.
- SIGNA RATE is the class credential; Υ Yield is the rank metric.
Deep dive: the in-app wiki.
For developers
The rest of this README is for working on the app itself.
Stack
- Framework: Next.js 15 App Router, React 19, TypeScript strict
- UI: Tailwind CSS, themeable SigRank SignalAF design tokens (carbon default)
- Data: Supabase with cold-store snapshot and mock fallback
- Billing: Stripe Checkout, Billing Portal, webhook handlers
- Validation: zod, Node test runner, TypeScript
Quick Start
The app is designed to run without Supabase or Stripe credentials. When env vars are missing, reads fall back to the cold-store snapshot and then deterministic mock data, while billing routes return configuration errors instead of crashing, so it stays buildable, previewable, and testable out of the box.
Requires Node 22.x (see
enginesinpackage.json). On a newer Node,next devmay fail to start; use the version manager of your choice to pin 22.If vendor chunks act strange, run the dev server directly:
node_modules/.bin/next dev --port 3000
Scripts
Before committing, run the gates CI enforces:
Project Map
Data Model
All app code reads operator data through @/lib/data. The facade chooses the safest
available source, in order:
- Supabase live reads when credentials are configured.
- Cold-store snapshot (
lib/data/snapshot.json) if live reads are unavailable or fail. - Mock fixtures (
lib/data/mock.ts) as the last resort.
Environment
Copy .env.example to .env.local and fill values as needed. All are optional locally
(the app degrades gracefully); production values live in Vercel environment variables.
Never commit real secrets or proprietary ruleset values.
SIGRANK_INGEST_WRITE — the ingest-write flip
Status: LIVE in Production (1). The board persists verified signed snapshots
from enrolled MCP devices. Set in Vercel for both Production and Preview.
Do NOT mark this variable as sensitive in Vercel. It is a boolean on/off flag (
1or""), not a secret. When marked sensitive,vercel env pullreturns""even though the runtime has1, which misleads agents and operators into thinking the flip is OFF. Ifvercel env pullshows""but the board is receiving verified submissions, the var is likely marked sensitive again. Fix it in the Vercel dashboard (remove the sensitive flag).
Authoritative verification is RUNTIME behavior, not the CLI pull:
- PostHog:
snapshot_submittedevents withsource: "agent"andpersisted: true - Supabase: rows in
snapshot_submissionswithverification_tier = 'verified'andstatus = 'scored' - A real signed submit via
npx sigrank submitreturningranked: true
If any of those show verified rows landing, the flip is ON regardless of what
vercel env pull says.
Supabase
Schema, migrations, RLS policies, and seed data live in supabase/. See
supabase/README.md to run your own instance. RS.xx scoring
weights are server-only and are not included here.
Scoring Invariants
Product contracts, not implementation details:
Υ = (cache_read × output) / input²T × C × R = Cr / I = Leverage10xDEV = log₁₀(Leverage)- SIGNA RATE is the class credential; Υ Yield is the rank metric.
- RS.xx weights are server-only and must not be exposed to client components.
Development Notes
- Keep changes small and aligned with existing file ownership.
- Pages are React Server Components by default; add
'use client'only when a component needs hooks, event handlers, or browser APIs. - Keep
components/sigrank/tokens.tsand Tailwind theme values in sync. - Use
<Placeholder />for placeholder metrics and<CanonId />for canonical real values. - Do not import server-only scoring configuration into client code.
- Avoid random values and wall-clock reads at module scope.
Related
- signalaf.com — the live board
- signalaf.com/score — paste four token counts, get projected yield + ghost rank
- sigrank-mcp — the CLI / TUI / MCP server (
npx sigrank) - Smithery — one-click MCP install for Claude Desktop, Cursor, and more
- Glama — MCP server directory listing
Community
Reporting issues
Found a bug or have a feature request? Please open an issue on GitHub. Search existing issues first to avoid duplicates, and include repro steps, expected vs. actual behavior, and your environment (OS, Node version).
Pull request process
- Fork the repo and create a branch from
main. - Make your change, keeping it small and aligned with existing file ownership.
- Ensure
npx tsc --noEmitpasses with 0 errors before pushing. - Open a pull request against
mainwith a clear description of what and why.
License
MIT; see LICENSE.
Source: README.md at commit 2f998e3
Tools
0Version history
1- v1.0.0LatestSep 16, 2026