66from ..storage import StorageManager
77from ..symlink_manager import SymlinkManager
88from .base import FrameworkAdapter , _cap_id , ensure_package_dir
9+ from .mcp_config_patcher import McpConfigPatcher
910
1011
1112class OpenCodeAdapter (FrameworkAdapter ):
@@ -40,20 +41,19 @@ def remove_skill(self, cap_name: str, owner: str = "global") -> bool:
4041 link_path .unlink ()
4142 return True
4243
43- def capability_exists (self , cap_name : str ) -> bool :
44- link_path = self .opencode_skills_dir / cap_name
44+ def capability_exists (self , cap_name : str , owner : str = "global" ) -> bool :
45+ link_path = self .opencode_skills_dir / _cap_id ( cap_name , owner )
4546 if link_path .exists () and link_path .is_symlink ():
4647 return True
4748
48- from .mcp_config_patcher import McpConfigPatcher
4949 config_path = Path .home () / ".config" / "opencode" / "opencode.json"
50+ server_key = McpConfigPatcher .build_server_key (cap_name , owner )
5051 return (
51- McpConfigPatcher .mcp_server_exists_json (config_path , cap_name , "mcp" )
52- or McpConfigPatcher .mcp_server_exists_json (config_path , cap_name , "mcpServers" )
52+ McpConfigPatcher .mcp_server_exists_json (config_path , server_key , "mcp" )
53+ or McpConfigPatcher .mcp_server_exists_json (config_path , server_key , "mcpServers" )
5354 )
5455
5556 def install_mcp_server (self , cap_name : str , version : str , source_dir : Path , owner : str = "global" ) -> bool :
56- from .mcp_config_patcher import McpConfigPatcher
5757 package_dir = ensure_package_dir (self .storage , cap_name , version , source_dir , owner = owner )
5858 if package_dir .exists () and package_dir .resolve () != source_dir .resolve ():
5959 shutil .rmtree (package_dir )
@@ -73,8 +73,6 @@ def install_mcp_server(self, cap_name: str, version: str, source_dir: Path, owne
7373 cap_name , package_dir , mcp_meta ,
7474 )
7575
76- # v0.7.2 and older wrote OpenCode MCP servers to the Claude-style
77- # mcpServers block. Remove the stale entry when upgrading/reconciling.
7876 legacy_servers = config .get ("mcpServers" )
7977 if isinstance (legacy_servers , dict ):
8078 legacy_servers .pop (cap_name , None )
@@ -132,7 +130,6 @@ def install_skill(self, cap_name: str, version: str, source_dir: Path, owner: st
132130 package_dir = ensure_package_dir (self .storage , cap_name , version , source_dir , owner )
133131
134132 md_files = sorted (package_dir .glob ("*.md" ))
135- # Skip SKILL.md files — those are loaded by the skills adapter, not as commands
136133 command_files = [f for f in md_files if f .name != "SKILL.md" ]
137134 cmd_file = None
138135 for f in command_files :
0 commit comments