GitHub MCP server loads no tools in OpenCode: {env:VAR} vs ${env:VAR}
Fixes the GitHub MCP server showing zero tools in OpenCode because the env placeholder syntax is wrong. Use when the server works in other clients but OpenCode shows no tools. Not for token or network errors.
GitHub MCP server loads no tools in OpenCode: {env:VAR} vs ${env:VAR}
TL;DR: In OpenCode config, write the token placeholder as ${env:VAR} with the dollar sign, not {env:VAR}. Without the dollar sign OpenCode passes the literal string, auth fails silently, and no tools load. Restart OpenCode after fixing the config.
The error
No tools available from the GitHub MCP server in OpenCode (server shows as connected but the tool list is empty).Fix it
- Open your OpenCode MCP config and find the GitHub server env entry.
Expected: You see {env:GITHUBPERSONALACCESS_TOKEN} without a dollar sign.
- Change it to ${env:GITHUBPERSONALACCESS_TOKEN}.
Expected: The placeholder now uses the dollar-brace form.
- Save and restart OpenCode.
Expected: The GitHub server lists its tools normally.
When this applies
The GitHub MCP server connects in OpenCode but exposes no tools, while the same server works in Claude Desktop or Cursor.
When this does NOT apply
If tools are missing in every client, the server itself is misconfigured. If you see 401s, the token value is wrong, not the placeholder syntax.
Tool compatibility
GitHub MCP server with OpenCode
Also seen as
- OpenCode GitHub MCP no tools
- GitHub MCP server empty tool list OpenCode
- env var not expanding in OpenCode MCP config
Why it happens
OpenCode only expands ${env:VAR} placeholders. The bare {env:VAR} form is passed through literally, so the server receives the text {env:VAR} as the token, fails auth, and registers no tools.
Edge cases
- The same mistake breaks any MCP server in OpenCode, not just GitHub.
- Some examples online show the wrong form; copy from the OpenCode docs.
- After fixing, delete any cached server state in OpenCode before restarting.
Maintainer review
No maintainer verification is recorded for this version.
This records the version a maintainer checked. It does not assert that the version is the latest upstream release.