MCP Server
@solidus-network/mcp, Solidus’u bir ajanın çağırabileceği çalışma zamanı araçları olarak sunan bir MCP (Model Context Protocol) sunucusudur — bir did:solidus DID’i çözümler, bir kimlik bilgisini doğrular ve kapsamlı bir harcama yetkilendirmesini kontrol eder, oluşturur veya onaylar. MCP uyumlu herhangi bir istemciyi (Claude Code, Cursor, Windsurf veya özel bir ajan döngüsü) stdio üzerinden buna yönlendirin, bunlar sıradan araç çağrılarına dönüşür.
Bu, ajan-yerel dağıtımın çalışma zamanı yarısıdır. CLI, kurulum zamanı yarısıdır — solidus init --with-mcp, bu sunucuyu tek adımda bir projenin .mcp.json dosyasına bağlar.
Kurulum
Bunu global olarak kurmazsınız — bir MCP istemcisi, npx ile talep üzerine başlatır:
npx @solidus-network/mcpClaude Code (.mcp.json)
{
"mcpServers": {
"solidus": {
"command": "npx",
"args": ["-y", "@solidus-network/mcp"],
"env": {
"SOLIDUS_API_KEY": "<your operator key, only needed for create_mandate>"
}
}
}
}Diğer herhangi bir MCP istemcisi (Cursor, Windsurf, özel bir StdioClientTransport) aynı şekilde çalışır — bu standart bir stdio MCP sunucusudur, command: npx, args: ["-y", "@solidus-network/mcp"].
Araçlar
5 araç, 3 okuma (yan etkisi yok, kimlik doğrulama yok) ve 2 yazma (yan etkili; bir ajan çağırmadan önce bir insanın koşulları onaylaması gerekir):
| Tool | Type | What it does |
|---|---|---|
resolve_did | okuma | Solidus zincirinden bir did:solidus DID belgesini çözümler. |
verify_credential | okuma | Bir Solidus doğrulanabilir kimlik bilgisini kimliğine göre zincire karşı doğrular. |
check_mandate | okuma | Bir harcama-yetkilendirmesi zarfının verilen bir tutarı/para birimini/hattı yetkilendirip yetkilendirmediğini kontrol eder. Saf (pure) — kimlik doğrulama gerekmez, hiçbir şeyi hareket ettirmez. Bu, karşı taraf ret kontrolüdür. |
create_mandate | yazma | Bir asıl (principal) DID adına bir ajan için kapsamlı bir spend_mandate kimlik bilgisi düzenler (maxAmount/currency/rail/expiresAt ile sınırlandırılmış). Kontrol edilebilir zarfı döndürür — asla özel anahtarı veya kimlik bilgisi paketini değil. |
agent_pay | yazma | Bir yetkilendirme kapsamında bir ödemeyi onaylar ve çağıranın kendi hattı için zarfı döndürür. Hiçbir şeyi ödemez (settle) — bir ret, işlemi kısa devre yapar ve başka bir işlem yapmaz. |
check_mandate, Agents API sayfasında belgelenen aynı POST /v1/mandates/check rotasını çağırır — yetkilendirme-kontrol akışı — ve authorized/reason’ı olduğu gibi iletir.
Yapılandırma
Belirtilenler dışında hepsi isteğe bağlıdır; sunucu, kutudan çıktığı haliyle her okuma aracı için çalışan varsayılanlara sahiptir.
| Env var | Default | Used by |
|---|---|---|
SOLIDUS_RPC_URL | https://rpc.solidus.network | resolve_did, verify_credential (zincir SDK’sı) |
SOLIDUS_AGENTS_URL | https://agents.solidus.network | check_mandate, create_mandate, agent_pay (agents arka ucu) |
SOLIDUS_API_KEY | — | yalnızca create_mandate — bir operatör bearer token’ı. Diğer dört araç kimlik doğrulama gerektirmez. |
SOLIDUS_SDK_MODE | testnet | Zincir SDK modu: testnet (herkese açık zincir, okuma için anahtar gerekmez), mainnet veya stub (geliştirme için yerel Postgres destekli simülasyon). |
Hızlı başlangıç: çözümle, reddet, yükselt, onayla
Bir yetkilendirme, bir ajanın ne kadar harcayabileceğini sınırlar; check_mandate, bir karşı tarafın bir ödemeyi kabul etmeden önce çalıştırdığı ret kontrolüdür. Bu, bir DID’i çözümlemeyi, reddi almayı, ardından yetkilendirmeyi yükseltip onaylamayı adım adım gösterir:
// 1. Resolve the paying agent's DID
resolve_did({ "did": "did:solidus:testnet:<addr>" })
// → { "did": "did:solidus:testnet:<addr>", "document": { ... }, "resolved": true }
// 2. Issue a mandate capped at 500 TRY
create_mandate({
"agentId": "<agent-id>",
"principalDid": "did:solidus:testnet:<principal-addr>",
"maxAmount": "500",
"currency": "TRY",
"rail": "moka",
"expiresAt": "2026-08-01T00:00:00.000Z"
})
// → { "mandateId": "...", "envelope": "<base64url envelope>", "expiresAt": "2026-08-01T00:00:00.000Z" }
// 3. The counterparty checks a 750 TRY charge against it — over the cap, refused
check_mandate({ "envelope": "<envelope from step 2>", "amount": 750, "currency": "TRY", "rail": "moka" })
// → { "authorized": false, "reason": "amount exceeds mandate limit" }
// 4. Raise the mandate to 1000 TRY
create_mandate({ /* same as step 2, "maxAmount": "1000" */ })
// → { "mandateId": "...", "envelope": "<new envelope>", "expiresAt": "..." }
// 5. agent_pay authorizes the same 750 TRY charge under the raised mandate
agent_pay({ "envelope": "<envelope from step 4>", "amount": 750, "currency": "TRY", "rail": "moka" })
// → { "authorized": true, "envelope": "<same envelope>", "header": "x-solidus-mandate" }- adımın
envelopeveheader’ı, çağıranın kendi ödeme hattına gönderdiği şeylerdir — Solidus’un rolü onaylamada sona erer.agent_payhiçbir şeyi ödemez; hiçbir aşamada bu paket veya Solidus üzerinden para hareket etmez.
Güven sınırı
Bu paket, @solidus-network/sdk (zincir okumaları) ve @solidus-network/agent-identity (yetkilendirmeler, kimlik bilgileri) üzerinde ince bir bağdaştırıcıdır. Hiçbir düzenleyici anahtarı tutmaz ve kendi başına hiçbir kriptografi yapmaz — kimlik bilgisi imzalama, Solidus arka ucunda gerçekleşir; bir kimlik bilgisine duyulan güven, bu koda değil, düzenleyici anahtarına duyulan güvendir.
Durum
- İlk sürüm (0.1.0). Yeni paket, testnet kalitesinde.
- Solidus L1 yalnızca testnet’tir — mainnet yoktur. DID’ler
did:solidus:testnet:<addr>olarak çözümlenir. Bu araçlar aracılığıyla oluşturduğunuz her şeyi (DID’ler, kimlik bilgileri, yetkilendirmeler) kalıcı bir üretim kaydı değil, sandbox verisi olarak değerlendirin. - Kimlik bilgisi imzalamanın (BBS+) henüz bağımsız bir güvenlik denetimi yoktur. Bununla üretim kalitesinde bir değeri korumayın.
Sonraki adımlar
- CLI —
solidus init --with-mcp, bu sunucuyu sizin için.mcp.json’a bağlar - Agents API —
check_mandate,create_mandateveagent_pay’in altta çağırdığı HTTP yüzeyi - SDK Referansı — bu sunucunun sarmaladığı paketler