Šķîþ ţö ḿàîñ çöñţéñţ

Üšîñĝ ţĥé bowrain þļüĝîñ ŵîţĥ ÀÎ àššîšţàñţš

kapi (ŵîţĥ ţĥé bowrain þļüĝîñ) éẋþöšéš þŕöĵéçţ ḿàñàĝéḿéñţ çàþàƃîļîţîéš àš àñ ḾÇÞ (Ḿöđéļ Çöñţéẋţ Þŕöţöçöļ) šéŕṽéŕ. Ţĥîš ļéţš ÀÎ ţööļš ļîķé Çļàüđé, ĜîţĤüƃ Çöþîļöţ, Çüŕšöŕ, Ŵîñđšüŕƒ, àñđ öţĥéŕ ḾÇÞ-çöḿþàţîƃļé àĝéñţš çĥéçķ þŕöĵéçţ šţàţüš, ļîšţ ţŕàçķéđ ƒîļéš, þüšĥ àñđ þüļļ, ḿàñàĝé ƒļöŵš, àñđ çöñšüļţ ţĥé ŵöŕķšþàçé'š çöñţéẋţ ĝŕàþĥ, àļļ ţĥŕöüĝĥ šţŕüçţüŕéđ ţööļ çàļļš.

Ǫüîçķ šţàŕţ

Šţàŕţ ţĥé ḾÇÞ šéŕṽéŕ:

kapi mcp

Ţĥîš ļàüñçĥéš à ĴŠÖÑ-ŔÞÇ šéŕṽéŕ öñ šţđîö. Ýöü đöñ'ţ ŕüñ îţ ḿàñüàļļý; ýöüŕ ÀÎ ţööļ šţàŕţš îţ àš à šüƃþŕöçéšš. Ŵîţĥ ţĥé bowrain þļüĝîñ îñšţàļļéđ, ţĥé šéŕṽéŕ'š ţööļ šéţ îñçļüđéš ţĥé þŕöĵéçţ àñđ çöñţéẋţ ţööļš ƃéļöŵ. Îţ ŕéǫüîŕéš à .kapi þŕöĵéçţ (îţ ŵàļķš üþŵàŕđ ļööķîñĝ ƒöŕ à kapi.yaml ŕéçîþé, ļîķé ĝîţ).

:::ţîþ Ƒöŕ àđ-ĥöç ƒîļé þŕöçéššîñĝ ŵîţĥöüţ à þŕöĵéçţ, ţĥé šàḿé kapi mcp šéŕṽéš ţĥé kapi ḾÇÞ ţööļš. :::

Šéţüþ

Çļàüđé Đéšķţöþ

Àđđ ţö ýöüŕ Çļàüđé Đéšķţöþ çöñƒîĝ (~/Library/Application Support/Claude/claude_desktop_config.json öñ ḿàçÖŠ, %APPDATA%\Claude\claude_desktop_config.json öñ Ŵîñđöŵš):

{
"mcpServers": {
"kapi": {
"command": "kapi",
"args": ["mcp"]
}
}
}

Ŕéšţàŕţ Çļàüđé Đéšķţöþ. Ţĥé ţööļš àþþéàŕ îñ ţĥé ţööļ þîçķéŕ.

Çļàüđé Çöđé

Àđđ ţö ýöüŕ þŕöĵéçţ'š .mcp.json ƒîļé (öŕ çŕéàţé îţ àţ ţĥé ŕéþöšîţöŕý ŕööţ):

{
"mcpServers": {
"kapi": {
"command": "kapi",
"args": ["mcp"]
}
}
}

Çļàüđé Çöđé đîšçöṽéŕš àñđ çöññéçţš ţö ţĥé šéŕṽéŕ àüţöḿàţîçàļļý.

ṼŠ Çöđé (ĜîţĤüƃ Çöþîļöţ / Çöþîļöţ Çĥàţ)

Àđđ ţö .vscode/mcp.json îñ ýöüŕ þŕöĵéçţ:

{
"servers": {
"kapi": {
"command": "kapi",
"args": ["mcp"]
}
}
}

Öŕ àđđ ţö ýöüŕ ṼŠ Çöđé šéţţîñĝš (.vscode/settings.json):

{
"mcp": {
"servers": {
"kapi": {
"command": "kapi",
"args": ["mcp"]
}
}
}
}

Çüŕšöŕ

Àđđ ţö ýöüŕ Çüŕšöŕ ḾÇÞ çöñƒîĝ (~/.cursor/mcp.json):

{
"mcpServers": {
"kapi": {
"command": "kapi",
"args": ["mcp"]
}
}
}

Ŵîñđšüŕƒ

Àđđ ţö ýöüŕ Ŵîñđšüŕƒ ḾÇÞ çöñƒîĝ (~/.windsurf/mcp.json):

{
"mcpServers": {
"kapi": {
"command": "kapi",
"args": ["mcp"]
}
}
}

:::ţîþ ΃ kapi îš ñöţ îñ ýöüŕ $PATH, üšé ţĥé ƒüļļ þàţĥ ţö ţĥé ƃîñàŕý (ƒöŕ éẋàḿþļé /usr/local/bin/kapi öŕ $HOME/go/bin/kapi). :::

Àṽàîļàƃļé ţööļš

Öñçé çöññéçţéđ, ýöüŕ ÀÎ àššîšţàñţ çàñ çàļļ ţĥéšé ţööļš:

ŢööļŴĥàţ îţ đöéš
project_configŔéàđ þŕöĵéçţ çöñƒîĝüŕàţîöñ ƒŕöḿ ţĥé kapi.yaml ŕéçîþé
project_statusŠĥöŵ šýñç šţàţüš: þéñđîñĝ þüšĥ/þüļļ çöüñţš, šéŕṽéŕ çöññéçţîöñ
project_lsĻîšţ ţŕàçķéđ ƒîļéš ŵîţĥ öþţîöñàļ šţàţš (ŵöŕđ çöüñţš, đîŕţý đéţéçţîöñ)
project_pushÜþļöàđ ļöçàļ çĥàñĝéš ţö Bowrain Šéŕṽéŕ
project_pullĐöŵñļöàđ ŕéšüļţš ƒŕöḿ Bowrain Šéŕṽéŕ
list_flowsĻîšţ àṽàîļàƃļé ƒļöŵš (ƃüîļţ-îñ àñđ þŕöĵéçţ-đéƒîñéđ)
concept_searchŠéàŕçĥ ţĥé ŵöŕķšþàçé çöñţéẋţ ĝŕàþĥ ƒöŕ ĝöṽéŕñéđ çöñçéþţš
concept_storyŠĥöŵ ţĥé çĥŕöñöļöĝîçàļ ţîḿéļîñé öƒ à ĝöṽéŕñéđ çöñçéþţ
experiment_statusŔéþöŕţ çöñţéẋţ-ĝŕàþĥ çĥàñĝé-šéţš, ŵîţĥ đéţàîļ àñđ ƃļàšţ ŕàđîüš ƒöŕ öñé çĥàñĝé-šéţ

Ţĥé ţĥŕéé çöñçéþţ ţööļš ŕéàđ ţĥé ŵöŕķšþàçé çöñţéẋţ ĝŕàþĥ; ţĥéý ŕéǫüîŕé à þŕöĵéçţ çöññéçţéđ ţö à ŵöŕķšþàçé öñ à Bowrain šéŕṽéŕ.

Éẋàḿþļé çöñṽéŕšàţîöñš

"Ŵĥàţ'š ţĥé šţàţé öƒ ḿý þŕöĵéçţ?"

Àšķ ýöüŕ ÀÎ àššîšţàñţ:

Ŵĥàţ'š ţĥé šţàţüš öƒ ţĥîš þŕöĵéçţ?

Ţĥé àššîšţàñţ çàļļš project_status àñđ ŕéţüŕñš à šüḿḿàŕý: ĥöŵ ḿàñý ƒîļéš, ŵöŕđš, àñđ ƃļöçķš àŕé ţŕàçķéđ, ĥöŵ ḿàñý çĥàñĝéš àŕé þéñđîñĝ þüšĥ öŕ þüļļ, àñđ ŵĥéţĥéŕ ţĥé þŕöĵéçţ îš šýñçéđ ŵîţĥ ţĥé šéŕṽéŕ.

"Ŵĥîçĥ ƒîļéš ĥàṽé çĥàñĝéđ?"

Ŵĥîçĥ çöñţéñţ ƒîļéš ĥàṽé ļöçàļ çĥàñĝéš?

Ţĥé àššîšţàñţ çàļļš project_ls ŵîţĥ dirty: true àñđ ŕéţüŕñš öñļý ƒîļéš ŵîţĥ üñçöḿḿîţţéđ çĥàñĝéš, àļöñĝ ŵîţĥ ƃļöçķ àñđ ŵöŕđ çöüñţš.

"Ĥöŵ ƃîĝ îš ţĥîš þŕöĵéçţ?"

Ĥöŵ ḿàñý ŵöŕđš àñđ ƒîļéš àŕé îñ ţĥîš þŕöĵéçţ?

Ţĥé àššîšţàñţ çàļļš project_ls ŵîţĥ stats: true àñđ ŕéţüŕñš à ƃŕéàķđöŵñ öƒ éṽéŕý ţŕàçķéđ ƒîļé ŵîţĥ ƃļöçķ çöüñţš, ŵöŕđ çöüñţš, àñđ ţöţàļš.

"Šĥöŵ ḿé ţĥé þŕöĵéçţ çöñƒîĝ"

Ŵĥàţ ļöçàļéš àŕé çöñƒîĝüŕéđ ƒöŕ ţĥîš þŕöĵéçţ?

Ţĥé àššîšţàñţ çàļļš project_config àñđ ŕéţüŕñš ţĥé þŕöĵéçţ ñàḿé, šöüŕçé ļöçàļé, ţàŕĝéţ ļöçàļéš, šéŕṽéŕ ÜŔĻ, àñđ ƒîļé ḿàþþîñĝ çöüñţ.

"Þüšĥ ḿý çĥàñĝéš"

Þüšĥ ţĥé ļàţéšţ çĥàñĝéš ţö ţĥé šéŕṽéŕ

Ţĥé àššîšţàñţ çàļļš project_push àñđ ŕéţüŕñš ĥöŵ ḿàñý ƃļöçķš ŵéŕé üþļöàđéđ, ţĥé ŵöŕđ çöüñţ, àñđ ĥöŵ ḿàñý ƒîļéš ŵéŕé šçàññéđ.

"Þüļļ ļàţéšţ ŕéšüļţš"

Þüļļ ţĥé ļàţéšţ Ƒŕéñçĥ àñđ Ĝéŕḿàñ ŕéšüļţš ƒŕöḿ ţĥé šéŕṽéŕ

Ţĥé àššîšţàñţ çàļļš project_pull ŵîţĥ locales: ["fr", "de"] àñđ ŕéţüŕñš ĥöŵ ḿàñý ƃļöçķš ŵéŕé đöŵñļöàđéđ àñđ ƒîļéš ŵéŕé üþđàţéđ.

"Þŕéṽîéŵ ƃéƒöŕé þüšĥîñĝ"

Ŵĥàţ ŵöüļđ ĝéţ þüšĥéđ îƒ Î þüšĥ ñöŵ? Đöñ'ţ àçţüàļļý þüšĥ ýéţ.

Ţĥé àššîšţàñţ çàļļš project_push ŵîţĥ dry_run: true àñđ šĥöŵš ŵĥàţ ŵöüļđ ƃé üþļöàđéđ ŵîţĥöüţ ḿàķîñĝ àñý çĥàñĝéš.

"Κ ţĥîš ţéŕḿ àļļöŵéđ ĥéŕé?"

Κ "é-šĥöþ" à ţéŕḿ ŵé šţîļļ üšé?

Ţĥé àššîšţàñţ çàļļš concept_search ŵîţĥ ţĥé ǫüéŕý àñđ ŕéàđš ţĥé çöñçéþţ'š šţàţüš, àñđ concept_story ƒöŕ ĥöŵ îţ ĝöţ ţĥéŕé.

Ţööļ ŕéƒéŕéñçé

þŕöĵéçţ_šţàţüš

Šĥöŵ þŕöĵéçţ šýñç šţàţüš. Ŕéţüŕñš ļöçàļ þŕöĵéçţ îñƒö ŵĥéñ ñö šéŕṽéŕ îš çöñƒîĝüŕéđ.

Ñö þàŕàḿéţéŕš.

þŕöĵéçţ_çöñƒîĝ

Ŕéàđ þŕöĵéçţ çöñƒîĝüŕàţîöñ ƒŕöḿ ţĥé kapi.yaml ŕéçîþé àţ ţĥé þŕöĵéçţ ŕööţ.

Ñö þàŕàḿéţéŕš.

þŕöĵéçţ_ļš

Ļîšţ ƒîļéš ţŕàçķéđ ƃý ţĥé þŕöĵéçţ.

ÞàŕàḿéţéŕŢýþéŔéǫüîŕéđĐéšçŕîþţîöñ
pathsšţŕîñĝ[]ñöƑîļţéŕ ƃý þàţĥ þŕéƒîẋéš
statsƃööļñöÎñçļüđé ƃļöçķ àñđ ŵöŕđ çöüñţš þéŕ ƒîļé
dirtyƃööļñöŠĥöŵ öñļý ƒîļéš ŵîţĥ ļöçàļ çĥàñĝéš

þŕöĵéçţ_þüšĥ

Üþļöàđ ļöçàļ çĥàñĝéš ţö Bowrain Šéŕṽéŕ.

ÞàŕàḿéţéŕŢýþéŔéǫüîŕéđĐéšçŕîþţîöñ
pathsšţŕîñĝ[]ñöŠþéçîƒîç ƒîļé þàţĥš ţö þüšĥ (đéƒàüļţ: àļļ)
forceƃööļñöŔé-üþļöàđ éṽéŕýţĥîñĝ éṽéñ îƒ üñçĥàñĝéđ
dry_runƃööļñöŠĥöŵ ŵĥàţ ŵöüļđ ƃé üþļöàđéđ ŵîţĥöüţ šéñđîñĝ

þŕöĵéçţ_þüļļ

Đöŵñļöàđ ŕéšüļţš ƒŕöḿ Bowrain Šéŕṽéŕ.

ÞàŕàḿéţéŕŢýþéŔéǫüîŕéđĐéšçŕîþţîöñ
localesšţŕîñĝ[]ñöĻàñĝüàĝéš ţö đöŵñļöàđ (ƒöŕ éẋàḿþļé ["fr", "de"])
forceƃööļñöŔé-đöŵñļöàđ éṽéŕýţĥîñĝ éṽéñ îƒ üñçĥàñĝéđ
dry_runƃööļñöŠĥöŵ ŵĥàţ ŵöüļđ çĥàñĝé ŵîţĥöüţ ŵŕîţîñĝ ƒîļéš

ļîšţ_ƒļöŵš

Ļîšţ àṽàîļàƃļé þŕöçéššîñĝ ƒļöŵš. Ŕéţüŕñš ƃöţĥ ƃüîļţ-îñ ƒļöŵš àñđ þŕöĵéçţ-đéƒîñéđ ƒļöŵš (îñļîñé öñ ţĥé ŕéçîþé àñđ ƒŕöḿ .kapi/flows/).

Ñö þàŕàḿéţéŕš.

çöñçéþţ_šéàŕçĥ

Šéàŕçĥ ţĥé ŵöŕķšþàçé çöñţéẋţ ĝŕàþĥ ƒöŕ ĝöṽéŕñéđ çöñçéþţš (ţéŕḿš, šţàţüš, đöḿàîñ) ḿàţçĥîñĝ à ǫüéŕý.

ÞàŕàḿéţéŕŢýþéŔéǫüîŕéđĐéšçŕîþţîöñ
queryšţŕîñĝñöƑŕéé-ţéẋţ ǫüéŕý àĝàîñšţ ţĥé ţéŕḿ ţéẋţ
statusšţŕîñĝñöƑîļţéŕ ƃý ţéŕḿ ļîƒéçýçļé šţàţüš (þŕéƒéŕŕéđ, àđḿîţţéđ, đéþŕéçàţéđ, ƒöŕƃîđđéñ)
marketšţŕîñĝñöƑîļţéŕ ƃý ḿàŕķéţ ṽàļîđîţý ţàĝ
domainšţŕîñĝñöƑîļţéŕ ƃý šüƃĵéçţ-ƒîéļđ đöḿàîñ
limitîñţñöḾàẋîḿüḿ ñüḿƃéŕ öƒ çöñçéþţš ţö ŕéţüŕñ (đéƒàüļţ 50)

çöñçéþţ_šţöŕý

Šĥöŵ ţĥé çĥŕöñöļöĝîçàļ ţîḿéļîñé öƒ à ĝöṽéŕñéđ çöñçéþţ: ŕéṽîšîöñš, öƃšéŕṽàţîöñš, çöḿḿéñţš, àñđ çĥàñĝé-šéţš.

ÞàŕàḿéţéŕŢýþéŔéǫüîŕéđĐéšçŕîþţîöñ
concept_idšţŕîñĝýéšŢĥé çöñçéþţ ÎĐ ŵĥöšé ţîḿéļîñé ţö ƒéţçĥ

éẋþéŕîḿéñţ_šţàţüš

Ŕéþöŕţ çöñţéẋţ-ĝŕàþĥ çĥàñĝé-šéţš. Ŵîţĥ à changeset_id, ŕéţüŕñš ţĥàţ çĥàñĝé-šéţ'š đéţàîļ àñđ à ƃļàšţ-ŕàđîüš šüḿḿàŕý (àƒƒéçţéđ ƃļöçķš, ñéŵ ṽîöļàţîöñš, ŕéšöļṽéđ ṽîöļàţîöñš, ŵöŕđš); ŵîţĥöüţ öñé, ļîšţš ţĥé ŵöŕķšþàçé'š çĥàñĝé-šéţš.

ÞàŕàḿéţéŕŢýþéŔéǫüîŕéđĐéšçŕîþţîöñ
changeset_idšţŕîñĝñöÀ çĥàñĝé-šéţ ÎĐ ţö đéţàîļ; öḿîţ ţö ļîšţ àļļ çĥàñĝé-šéţš
statusšţŕîñĝñöŴĥéñ ļîšţîñĝ, ƒîļţéŕ ƃý šţàţüš (đŕàƒţ, îñ_ŕéṽîéŵ, àþþŕöṽéđ, ḿéŕĝéđ, àƃàñđöñéđ)

Ĥöŵ îţ ŵöŕķš

Ñö šéŕṽéŕ þŕöçéšš, þöŕţš, öŕ àđđîţîöñàļ àüţĥéñţîçàţîöñ îš ñééđéđ. Ýöüŕ ÀÎ ţööļ šţàŕţš kapi mcp àš à šüƃþŕöçéšš, çöḿḿüñîçàţéš öṽéŕ šţđîñ/šţđöüţ, àñđ šĥüţš îţ đöŵñ ŵĥéñ ţĥé šéššîöñ éñđš. Îţ đîšçöṽéŕš ýöüŕ þŕöĵéçţ ţĥé šàḿé ŵàý ţĥé ÇĻÎ đöéš, ƃý ŵàļķîñĝ üþ ţĥé đîŕéçţöŕý ţŕéé ţö ƒîñđ ţĥé ñéàŕéšţ kapi.yaml ŕéçîþé.

Ŕéļàţéđ