Section 01
Quickstart
Oryn Works is a marketplace of MCP capabilities for AI agents. Install one into your client and use it immediately.
Install token-price into Claude Desktop (free, live on Base mainnet):
$ npx orynworks install token-price --client claude
→ wrote mcpServers.oryn-token-price to ~/Library/Application Support/Claude/claude_desktop_config.json
→ restart Claude Desktop to pick up the new serverOr print the config snippet to paste manually (no file writes):
$ npx orynworks install token-price
# Add to your MCP-aware client config:
{
"mcpServers": {
"oryn-token-price": {
"type": "http",
"url": "https://api.oryn.works/v1/skills/token-price/call"
}
}
}Make a direct call for testing (production agents go through their MCP client):
$ npx orynworks call echo-debug --prompt '{}'All 18 launch capabilities are currently free — no wallet, no session cookie. Smallest possible test:
curl -X POST https://api.oryn.works/v1/skills/echo-debug/call \
-H "Content-Type: application/json" \
-d '{}'Section 02
For operators
You build AI agents. Oryn Works lets your agent install third-party capabilities and pay per use, with an audit trail.
>Browse the hub
Visit /browse to filter by type (skill / knowledge), category, or price. Free capabilities are tagged.
>Live capabilities
18 capabilities are live on Base mainnet today. All free at launch:
echo-debugbase-live-blockens-resolvergithub-trendingtoken-pricetrending-tokenstop-gainersdex-pairsdefi-tvlwallet-portfoliobase-gaserc20-infotx-lookupuniswap-quotebase-pulsenarrative-tokensprediction-marketsbase-movers>Install into your MCP client
On any capability detail page, copy the install command. The SDK writes an entry to your client config (Claude Desktop, Cursor) or prints it for manual paste.
# Auto-write into Claude Desktop config
$ npx orynworks install <slug> --client claude
# Cursor
$ npx orynworks install <slug> --client cursor
# Just print the JSON
$ npx orynworks install <slug>>Pay per use
When your agent calls a paid capability, the gateway returns 402 Payment Required with an x402 challenge. Your wallet signs an EIP-712 payment payload, the gateway verifies the signature against your USDC allowance, and forwards the call.
Free capabilities work end-to-end without a payment header. No wallet, no approval, no friction.
Section 03
For builders
You have an MCP server or curated dataset. Publish it to Oryn Works, earn USDC per call, build on-chain reputation.
>Connect your wallet
Sign in via SIWE on /build. Your wallet address becomes your builder identity. Edit your public profile from /me.
>Publish a capability
Fill the form at /build/new. On submit, your wallet signs a transaction registering the capability on CapabilityRegistry. Gas is roughly $0.01 on Base.
Required: name, slug, type, category, description, host URL, price. Host URLs pointing to private/internal IPs are rejected.
>Earn and claim
Every paid call accrues to your balance in RevenueEscrow. The protocol takes 10%. Builders earn 90% of every call.
Operator pays 1.0000 USDC
→ 0.9000 USDC → builderBalance[you]
→ 0.1000 USDC → protocolTreasuryWithdraw any time from /build. The Claim button sends RevenueEscrow.claim() from your wallet, transferring USDC to your address.
Section 04
x402 payment
The Coinbase-led open protocol for HTTP-native micropayments. We use it for per-call billing.
Skip this section if you're only calling free capabilities — none of the 18 currently live caps use x402.
x402 piggybacks on HTTP 402 Payment Required, with EIP-712 signed payment payloads carried in an X-Payment header.
1. Agent calls a paid capability:
POST /v1/skills/<slug>/call
2. Gateway returns 402 with a challenge:
WWW-Authenticate: X402 realm="oryn", amount="0.0200"
3. Agent's client builds an EIP-712 payment for amount,
signs with the operator's wallet key, retries with:
X-Payment: <signed-payload>
4. Gateway verifies signature, nonce uniqueness, USDC
allowance. Forwards the call to the builder's host URL.
5. Off-chain ledger records the usage event.
Settlement worker batches per-builder accruals and
pushes them to RevenueEscrow on a schedule.Nonces are stored per-payer for replay protection. The settlement worker uses an idempotent lock-and-finalize pattern: events are locked before broadcast, finalized after on-chain confirmation, and reconciled at startup if a prior run crashed mid-flight.
Section 05
API reference
Both endpoints accept anonymous calls for free capabilities. Paid capabilities additionally require an X-Payment header (EIP-712 signed payload). The request body is forwarded verbatim to the upstream capability host — its schema is per-capability.
>POST /v1/skills/:slug/call
Call a skill capability. Body is forwarded as-is to the builder's host URL.
curl -X POST https://api.oryn.works/v1/skills/token-price/call \
-H "Content-Type: application/json" \
-d '{"symbol":"ETH"}'
# Paid capabilities additionally require: -H 'X-Payment: <eip712-signed-payload>'>POST /v1/knowledge/:slug/query
Call a knowledge capability. Body is forwarded as-is to the builder's host URL.
curl -X POST https://api.oryn.works/v1/knowledge/base-live-block/query \
-H "Content-Type: application/json" \
-d '{}'
# Paid capabilities additionally require: -H 'X-Payment: <eip712-signed-payload>'>Response shapes
// 200 OK
{
"ok": true,
"data": <upstream response>,
"costUsdc": "0.0200",
"latencyMs": 412
}
// 402 Payment Required
{
"error": "payment required",
"priceUsdc": "0.0200",
"protocol": "x402",
"version": "1"
}
// 502 Bad Gateway
{
"error": "upstream_502" |
"upstream_host_blocked" |
"upstream_timeout"
}Section 06
SDK reference
The orynworks npm package ships a CLI plus a programmatic client. Install with npm i orynworks.
>CLI
orynworks install <slug> [--client claude|cursor|print] [--gateway URL]
orynworks call <slug> --prompt "..." [--gateway URL] [--auth TOKEN]
orynworks query <slug> --prompt "..." [--gateway URL] [--auth TOKEN]
orynworks ping [--gateway URL]
orynworks --version>Programmatic
import { OrynClient } from "orynworks";
const client = new OrynClient({
gatewayUrl: "https://api.oryn.works",
});
// For knowledge caps use client.query("base-live-block", {})
const result = await client.call("token-price", { symbol: "ETH" });>Environment
>CapabilityRegistry
Catalog of registered capabilities. Each entry is keyed by keccak256(slug) and records the builder address, price, type, status, and metadata hash.
>RevenueEscrow
Holds USDC from paid calls. Splits 90/10 between builder and protocol on every settle(). Builders call claim() to withdraw their balance.