Skip to content

Issue: MCP Client disconnects immediately if Server returns a Prompt with an empty name {"name":""} #11816

Description

@mhuber88

Description

Description

The OpenCode MCP client appears to have strict validation on the prompts/list capability. If an MCP server returns a prompt object containing an empty string for the name ({"name": ""}), OpenCode throws an error and immediately closes the socket/connection with MCP error -32000.

This prevents the use of servers that may have minor schema bugs (like the official reportportal/mcp-server:1.0.0) but are otherwise functional.

Observed Behavior
The connection status shows "Connected" briefly, then logs an error and disconnects. The tools never populate.

Log Output:
ERROR service=mcp clientName=reportportal promptName= error=MCP error -32000: Connection closed failed to get prompt from MCP server

Expected Behavior
OpenCode should:

Detect the invalid name property.

Log a warning (e.g., Skipping invalid prompt: name is empty).

Continue processing the rest of the valid prompts/tools in the list.

Keep the connection alive.

Context / Environment
OS: macOS

Problematic Server: reportportal/mcp-server:1.0.0 (Docker)

Attempted Workaround

We attempted to strip the invalid JSON stream using a middleware/proxy wrapper (e.g. perl substitution) to remove the empty prompt entry. However, this proved unstable.

We were ultimately forced to downgrade the OpenCode CLI to a previous version to bypass this strict validation crash, suggesting this may be a regression in the latest CLI release.

Plugins

No response

OpenCode version

most recent version

Steps to reproduce

Reproduction Steps

  1. Create a dummy MCP server script (bad-server.sh) that mimics the ReportPortal v1.0.0 behavior:
#!/bin/bash
# Simple mock to reproduce the crash
while read line; do
  # 1. Handshake
  if [[ "$line" == *"initialize"* ]]; then
    echo '{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"prompts":{}},"serverInfo":{"name":"bug-repro","version":"1.0"}}}'
  fi
  # 2. OpenCode asks for prompts
  if [[ "$line" == *"prompts/list"* ]]; then
    # 3. Server returns a prompt with an empty name
    echo '{"jsonrpc":"2.0","id":2,"result":{"prompts":[{"name":"","description":"This crashes OpenCode"},{"name":"valid_prompt","description":"This should work"}]}}'
  fi
done
  1. Register this server in opencode.jsonc.

  2. Run opencode mcp list.

Screenshot and/or share link

No response

Operating System

macOS 26.2

Terminal

No response

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions