GATE003: Insecure remote MCP transport
A remote MCP server is configured over plaintext HTTP rather than HTTPS.
- Name
Severity- Type
- High
- Description
Default severity. An individual finding may be reported higher or lower when the surrounding configuration justifies it.
- Name
Explain locally- Type
- gate explain GATE003
- Description
The same text, in your terminal, with no network access.
What Gate detected
Gate found an MCP server whose url uses http:// with a non-local host. Loopback and private-network addresses are excluded: http://localhost:3000 during development is not the same risk as http://mcp.vendor.example.
Why this matters
Everything the agent sends to that server, and everything it receives back, crosses the network in the clear. That includes the bearer token in the Authorization header, the arguments to every tool call, and every tool result. An attacker on the path does not merely read the traffic: they can rewrite tool results, which is a direct prompt-injection channel into the agent. The MCP specification requires HTTPS for remote connections for exactly this reason.
Example
This is the shape of configuration that triggers the rule.
{
"mcpServers": {
"vendor": { "type": "http", "url": "http://mcp.vendor.example/v1" }
}
}
Remediation
Use https://. If the server does not offer TLS, treat that as a signal about the server rather than a problem to work around, and do not send it a credential.
Suppressing this rule
If this finding is acceptable in your repository, record why alongside the suppression:
gate.config.ts
export default defineConfig({
ignore: [
{
rule: 'GATE003',
reason: 'Why this is acceptable here',
},
],
})
Gate refuses to apply an ignore entry with no reason. The reason is the only thing that will tell the next person whether the suppression is still true.