You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
codebuddy: project-scope MCP written to .codebuddy/mcp.json instead of .mcp.json (mcpProject unused) #1185
mcpProject is used in project and workspace scope (src/mcp-reconcile.ts:565, const rel = projectScope ? paths.mcpProject : paths.mcp). CodeBuddy's default has been .mcp.json since v0.24.0 (57636a2). CodeBuddy 2.168.0's codebuddy mcp list shows <root>/.mcp.json and does not show .codebuddy/mcp.json, so the CodeBuddy side of your report is right.
So .codebuddy/mcp.json most likely comes from a toolPaths entry in your team's teamai.yaml. init does not write one. Could you paste that section?
If that is it, the bug is still in teamai, one level up. toolPaths is z.record(...).default({...}) (src/types.ts:461), so any toolPaths key in teamai.yaml replaces the whole default table instead of merging with it:
A tool the team lists keeps the team's copy of its paths, so a CodeBuddy entry copied before v0.24.0 keeps .codebuddy/mcp.json and never gets the fix.
A tool the team does not list loses its built-in paths. With only codebuddy under toolPaths, teamai mcp list no longer detects Claude Code, although .claude exists.
That is the trap from #1115. The fix is to merge the team's toolPaths over the defaults, tool by tool, so an override changes only the tool it names.
Workaround until then: if the team's toolPaths only repeats the defaults, delete the block. Otherwise set codebuddy.mcpProject: .mcp.json. Then run teamai pull.
Two CodeBuddy behaviors can also hide project servers once the file is in the right place:
CodeBuddy keeps <root>/.mcp.json servers pending until they are approved (enableAllProjectMcpServers or enabledMcpjsonServers). codebuddy mcp list shows them as "Needs approval".
CodeBuddy reads project MCP only from the session's working directory. A session started in a subdirectory of the project loads neither .mcp.json nor the local-scope servers.
Activity
SaulMoro commentedon Oct 17, 2026
Thanks for the detailed report. I could not reproduce it with the default paths, and I think the cause is a different one.
On 0.28.0-beta.4, with an isolated HOME, a local team repo and one CodeBuddy MCP server,
teamai mcp injectwrites:teamai.yamltoolPaths<root>/.mcp.jsontoolPaths<root>/.mcp.jsontoolPaths.codebuddy.mcpProject: .codebuddy/mcp.json<root>/.codebuddy/mcp.jsonmcpProjectis used in project and workspace scope (src/mcp-reconcile.ts:565,const rel = projectScope ? paths.mcpProject : paths.mcp). CodeBuddy's default has been.mcp.jsonsince v0.24.0 (57636a2). CodeBuddy 2.168.0'scodebuddy mcp listshows<root>/.mcp.jsonand does not show.codebuddy/mcp.json, so the CodeBuddy side of your report is right.So
.codebuddy/mcp.jsonmost likely comes from atoolPathsentry in your team'steamai.yaml.initdoes not write one. Could you paste that section?If that is it, the bug is still in teamai, one level up.
toolPathsisz.record(...).default({...})(src/types.ts:461), so anytoolPathskey inteamai.yamlreplaces the whole default table instead of merging with it:.codebuddy/mcp.jsonand never gets the fix.codebuddyundertoolPaths,teamai mcp listno longer detects Claude Code, although.claudeexists.That is the trap from #1115. The fix is to merge the team's
toolPathsover the defaults, tool by tool, so an override changes only the tool it names.Workaround until then: if the team's
toolPathsonly repeats the defaults, delete the block. Otherwise setcodebuddy.mcpProject: .mcp.json. Then runteamai pull.Two CodeBuddy behaviors can also hide project servers once the file is in the right place:
<root>/.mcp.jsonservers pending until they are approved (enableAllProjectMcpServersorenabledMcpjsonServers).codebuddy mcp listshows them as "Needs approval"..mcp.jsonnor the local-scope servers.legend91019 commentedon Oct 18, 2026
I'll take this issue. I'll work on tool-by-tool merging of custom toolPaths over default tool paths and add test coverage.
test(e2e): cover sparse toolPaths merge against built CLI (Tencent#1185)
test(source): keep Codex-only fixtures explicit (Tencent#1185)
test(source): isolate retarget ownership fixtures (Tencent#1185)
fix(config): merge custom toolPaths tool by tool over defaults (Tence…
test(e2e): cover sparse toolPaths merge against built CLI (Tencent#1185)
test(source): keep Codex-only fixtures explicit (Tencent#1185)
test(source): isolate retarget ownership fixtures (Tencent#1185)
fix(config): merge custom toolPaths tool by tool over defaults (#1185) (