Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

HTTP API: mcp

MCP projekce tohoto registru popsaná jako jedna typovaná hodnota: kdo odpovídá na `initialize` a s jakými verzemi protokolu, transporty a kolik relací každý drží, co z protokolu se poskytuje a co ne, každý nástroj s efektem a nápovědami, z nichž se odvozují jeho anotace, nástroje, které zapisují do repozitáře, zdroje a stav konfigurace každého deklarovaného klienta v tomto repozitáři. Nic z toho není vlastní seznam: nástroje jsou z registru, efekt je klasifikace schopnosti, klienti jsou provideři distribuce.

Vykresleno z docs/generated/openapi.json, který spustitelný soubor generuje ze svého registru schopností a CI jej odmítne, je-li zastaralý. Surový dokument je na /openapi.json; běžící server servíruje stejný dokument na vlastní /openapi.json a Swagger UI na /swagger.

mcp

MCP projekce tohoto registru popsaná jako jedna typovaná hodnota: kdo odpovídá na `initialize` a s jakými verzemi protokolu, transporty a kolik relací každý drží, co z protokolu se poskytuje a co ne, každý nástroj s efektem a nápovědami, z nichž se odvozují jeho anotace, nástroje, které zapisují do repozitáře, zdroje a stav konfigurace každého deklarovaného klienta v tomto repozitáři. Nic z toho není vlastní seznam: nástroje jsou z registru, efekt je klasifikace schopnosti, klienti jsou provideři distribuce.

GET /api/v1/mcp mcp.projection

Projekce MCP tohoto registru

Kdo odpovídá na `initialize` a s jakými verzemi protokolu; transporty a relace připojené přes každý; obsluhované metody a to, že prompty a notifikace ne; každý nástroj (nebo jen ty s jedním efektem) s jeho schopností, efektem a nápovědami, z nichž se odvozují jeho anotace; nástroje, které zapisují do repozitáře; zdroje; a zda každý klient, kterého distribuce deklaruje, má zde konfiguraci, která spouští server tohoto repozitáře. Čte registr a jeden soubor na deklarovaného klienta; nic nezapisuje.

  • query
  • experimentální
  • vyžaduje se měření výkonu
  • cache vypnuta
  • Nástroj MCP majordomus_mcp
  • Zdroj MCP {"name": "mcp", "uri": "majordomus://mcp"}

Parametry dotazu

názevtyppovinnépopispříklady
účinek ExecutionEffect | null ne Vypíše jen nástroje s tímto efektem: `read`, `process_state` nebo `repository_mutation`. Když chybí, vypíše každý nástroj. writers: "repository_mutation"

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/mcp?effect=repository_mutation"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 McpProjection Projekce MCP tohoto registru: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.

Schémata

Komponenty, které používají jen operace tohoto tagu. Každý řádek je pole daného typu, jeho doc komentář je popis; typ vlastněný jinou stránkou na ni odkazuje.

ExecutionHints

object
Co smí volající o volání předpokládat před jeho provedením: čtyři fakta, která MCP nazývá anotacemi nástroje, držená jednou na modelu, aby je žádná projekce neuváděla zvlášť.

Klasifikováno pomocí ExecutionPolicy::hints, nikdy deklarováno.

use majordomus_cli::capability::{CapabilityKind, ExecutionPolicy, Hints};
let read: Hints = ExecutionPolicy::classify(CapabilityKind::Query).hints();
assert_eq!(
    serde_json::to_value(read).unwrap(),
    serde_json::json!({ "read_only": true, "destructive": false, "idempotent": true, "open_world": false })
);
vlastnosttyppovinnépopis
read_only boolean ano Volání nic nemění, nikde.
destruktivní boolean ano Volání může přepsat nebo odstranit něco, co přežije tento proces.
idempotentní boolean ano Druhé shodné volání nezmění nic, co nezměnilo první.
open_world boolean ano Volání sahá za tento stroj. Žádný handler tohoto spustitelného souboru to nedělá: pozorování forge a rozhovor s advisorem jsou příkazy, které spouští člověk, ne schopnosti.

Používá McpToolEntry

McpClient

object
Jeden klient, pro něhož distribuce deklaruje konfiguraci vázanou na projekt.

use majordomus_cli::capability::builtin::mcp::{McpClient, McpClientStanding};
let mut clients: Vec<McpClient> = serde_json::from_value(serde_json::json!([
    { "id": "gemini", "title": "Gemini CLI", "config": ".gemini/settings.json", "standing": "absent" },
    { "id": "claude-code", "title": "Claude Code", "config": ".mcp.json", "standing": "wired" },
])).unwrap();
// ordered by the provider's id, whatever order the distribution declared them in
majordomus_cli::order::canonical(&mut clients);
assert_eq!(clients[0].id, "claude-code");
assert_eq!(clients[0].standing, McpClientStanding::Wired);
vlastnosttyppovinnépopis
id string ano ID poskytovatele.
název string ano Jméno, pod kterým to člověk zná.
config string ano Soubor, který čte, relativně k repozitáři.
postavení McpClientStanding → McpClientStanding ano Jak ten soubor zde stojí.

Používá McpProjection

McpClientStanding

"wired" | "foreign" | "absent"
Jak je na tom konfigurace klienta vázaná na projekt v tomto repozitáři.

use majordomus_cli::capability::builtin::mcp::McpClientStanding;
// the words a caller reads, as they are written on every surface
assert_eq!(serde_json::to_value(McpClientStanding::Wired).unwrap(), "wired");
assert_eq!(serde_json::to_value(McpClientStanding::Foreign).unwrap(), "foreign");
assert_eq!(serde_json::to_value(McpClientStanding::Absent).unwrap(), "absent");
  • wiredSoubor existuje a jmenuje launcher: tento klient spouští server tohoto repozitáře.
  • foreignSoubor existuje a nejmenuje launcher: klient ho přečte a spustí něco jiného, nebo nic.
  • absentSoubor neexistuje: tento klient zde nespustí žádný server, dokud nebude zapsán.

Používá McpClient

McpEffectCount

object
Kolik nástrojů má jeden efekt.

use majordomus_cli::capability::builtin::mcp::McpEffectCount;
use majordomus_cli::capability::Effect;
let c: McpEffectCount =
    serde_json::from_value(serde_json::json!({ "effect": "read", "tools": 149 })).unwrap();
assert_eq!((c.effect, c.tools), (Effect::Read, 149));
vlastnosttyppovinnépopis
účinek ExecutionEffect → ExecutionEffect ano Účinek.
nástroje integer (uint) ano Kolik nástrojů to má.

Používá McpProjection

McpFinding

object
Něco o projekci, s čím by člověk měl něco udělat.

use majordomus_cli::capability::builtin::mcp::McpFinding;
let f: McpFinding = serde_json::from_value(serde_json::json!({
    "code": "mcp_client_config_foreign",
    "message": ".mcp.json exists and does not name majordomus-mcp",
    "remedy": "add a `majordomus` server to .mcp.json whose command is majordomus-mcp",
})).unwrap();
// a finding always says what to do, not only what is wrong
assert!(!f.code.is_empty() && !f.remedy.is_empty());
vlastnosttyppovinnépopis
kód string ano Stabilní kód.
zpráva string ano Co je špatně.
náprava string ano Co s tím dělat.

Používá McpProjection

McpProjection

object
Projekce tohoto registru do MCP v tomto repozitáři.

use majordomus_cli::capability::builtin::mcp::McpProjection;
let p: McpProjection = serde_json::from_value(serde_json::json!({
    "server": { "name": "majordomus", "title": "Majordomus", "version": "0.14.0" },
    "protocol_versions": ["2025-06-18"],
    "transports": [{ "id": "stdio", "reached_by": "majordomus mcp", "attached": 0 }],
    "serving": { "methods": ["initialize"], "tools": true, "resources": true, "prompts": false, "notifications": false },
    "tool_count": 2,
    "tools": [],
    "effects": [{ "effect": "read", "tools": 1 }, { "effect": "repository_mutation", "tools": 1 }],
    "writers": ["majordomus_plan_transition"],
    "resources": { "builtin": 1, "objects": 0, "template": "majordomus://<kind>/<identity>" },
    "launcher_in_repository": false,
    "clients": [],
    "findings": [],
})).unwrap();
// the count is of every tool, whatever the `effect` filter narrowed `tools` to
assert_eq!(p.tool_count, p.effects.iter().map(|e| e.tools).sum::<usize>());
assert!(p.tools.is_empty() && p.writers.len() == 1);
vlastnosttyppovinnépopis
server McpServerIdentity → McpServerIdentity ano Kdo odpovídá na initialize.
protocol_versions array of string ano Přijímané verze protokolu, nejnovější první.
transporty pole McpTransportEntry → McpTransportEntry ano Jak se klient k serveru dostane.
obsluhuje McpServing → McpServing ano Co z protokolu se obsluhuje.
tool_count integer (uint) ano Kolik nástrojů registr promítá, ať se filtr ptal na cokoli.
nástroje pole McpToolEntry → McpToolEntry ano Požadované nástroje v pořadí registru.
efekty pole McpEffectCount → McpEffectCount ano Nástroje spočítané podle účinku, přítomný je každý účinek.
zapisovatelé array of string ano Nástroje, které zapisují do repozitáře, jménem. Instrukce initialize jmenují tytéž.
zdroje McpResourceSummary → McpResourceSummary ano Zdroje.
launcher_in_repository boolean ano Zda tento repozitář nese launcher na bin/majordomus-mcp. Kde ho nenese, konfigurace pojmenovává nainstalovaný příkaz téhož jména.
klienti pole McpClient → McpClient ano Klienti, pro které distribuce deklaruje konfiguraci, a v jakém stavu každý je.
zjištění pole McpFinding → McpFinding ano Na co by měl člověk reagovat. Prázdné znamená, že není co dělat.

Používá mcp.projection

McpResourceSummary

object
Zdroje, které klient může číst.

use majordomus_cli::capability::builtin::mcp::McpResourceSummary;
let r: McpResourceSummary = serde_json::from_value(serde_json::json!({
    "builtin": 54, "objects": 1742, "template": "majordomus://<kind>/<identity>",
})).unwrap();
// the two counts together are the length of `resources/list`
assert_eq!(r.builtin + r.objects, 1796);
vlastnosttyppovinnépopis
builtin integer (uint) ano Zdroje, na které odpovídá vestavěná schopnost.
objekty integer (uint) ano Objekty vrstvy tohoto repozitáře, každý jako další zdroj.
šablona string ano Tvar URI zdroje objektu.

Používá McpProjection

McpServerIdentity

object
Kdo odpovídá na initialize, tak, jak odpovídá.

use majordomus_cli::capability::builtin::mcp::McpServerIdentity;
let s: McpServerIdentity = serde_json::from_value(serde_json::json!({
    "name": "majordomus", "title": "Majordomus", "version": "0.14.0",
})).unwrap();
// the version is the executable's: the protocol adapter has none of its own to drift
assert_eq!((s.name.as_str(), s.version.as_str()), ("majordomus", "0.14.0"));
vlastnosttyppovinnépopis
název string ano Název serveru.
název string ano Název, který člověk čte.
verze string ano Verze: tohoto spustitelného souboru, nikdy ne verze samotného protokolového adaptéru.

Používá McpProjection

McpServing

object
Co server z protokolu obsluhuje a co ne.

use majordomus_cli::capability::builtin::mcp::McpServing;
let s: McpServing = serde_json::from_value(serde_json::json!({
    "methods": ["initialize", "tools/call"], "tools": true, "resources": true,
    "prompts": false, "notifications": false,
})).unwrap();
// what is not served is stated, so a client does not learn it from a refusal
assert!(s.tools && !s.prompts && !s.notifications);
assert!(!s.methods.iter().any(|m| m.starts_with("prompts/")));
vlastnosttyppovinnépopis
metody array of string ano Metody, které požadavek smí uvést. Cokoli jiného se odpoví -32601.
nástroje boolean ano Nástroje: každá schopnost, která nějaký deklaruje.
zdroje boolean ano Zdroje: každá schopnost, která nějaký deklaruje, a každý objekt vrstvy.
prompty boolean ano Prompty. Neposkytují se: prompt assety repozitáře jsou zdroje, protože neodrenderovaný prompt by vypadal jako hotový.
oznámení boolean ano Odběry a upozornění na změnu seznamu. Neobsluhováno: tento server neposílá nic, oč nebyl požádán.

Používá McpProjection

McpToolEntry

object
Jeden nástroj, jak ho registr promítá.

use majordomus_cli::capability::builtin::mcp::McpToolEntry;
use majordomus_cli::capability::Effect;
let t: McpToolEntry = serde_json::from_value(serde_json::json!({
    "name": "majordomus_plan_transition", "capability": "plan.transition",
    "module": "plan", "title": "Move an issue", "effect": "repository_mutation",
    "hints": { "read_only": false, "destructive": true, "idempotent": false, "open_world": false },
})).unwrap();
assert_eq!(t.effect, Effect::RepositoryMutation);
// the hints are the effect's classification, carried beside it rather than restated
assert!(t.hints.destructive && !t.hints.read_only && !t.hints.idempotent);
vlastnosttyppovinnépopis
název string ano Název, který klient volá.
schopnost string ano Schopnost, kterou promítá; capabilities.describe odpovídá na její schémata.
modul string ano Modul, který schopnost skládá.
název string ano Název.
účinek ExecutionEffect → ExecutionEffect ano Co volání mění.
nápovědy ExecutionHints → ExecutionHints ano Co smí volající předpokládat před voláním; anotace nástroje jsou touto hodnotou.

Používá McpProjection

McpTransportEntry

object
Jeden způsob, jak se klient k serveru dostane.

use majordomus_cli::capability::builtin::mcp::McpTransportEntry;
let t: McpTransportEntry = serde_json::from_value(serde_json::json!({
    "id": "stdio", "reached_by": "majordomus mcp", "attached": 1,
})).unwrap();
// a count of sessions at the moment of asking, not a claim that a server is running
assert_eq!((t.id.as_str(), t.attached), ("stdio", 1));
vlastnosttyppovinnépopis
id string ano stdio nebo http.
reached_by string ano Jak se k němu dostat: příkaz, který klient spustí, nebo cesta na sdíleném serveru.
připojeno integer (uint) ano Relace, které jsou k tomuto procesu právě teď připojeny.

Používá McpProjection

Prohledává názvy a popisy všech stránek, které tento web publikuje.