Bug description Created an MCP server. Added it to VSCode. The server is recognized and the 3 tools defined appear and work. On occasion, the 1 defined resource may appear in one of the VSCode windows but more times than not, selecting the resource results in a VS Code window showing an indeterminate progress bar until I restart VSCode.

What I would like to do is test the MCP server using JSON RPC. Here are the commands I sent using PowerShell and the results. It seems the only successful command that works is the initialization command. Not sure if the way I am attempting to test this is valid. resource or tool list command will return an error if the syntax is wrong, but will not display information when it is correct

echo '{"jsonrpc":"2.0", "id":1, "method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{"roots":{"listChanged":true}, "sampling":{}}, "clientInfo":{"name":"test-client","version":"1.0.0"}}}' | java -jar mcp-server-0.0.1-SNAPSHOT.jar :::::::::{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"completions":{},"logging":{},"prompts":{"listChanged":true},"resources":{"subscribe":false,"listChanged":true},"tools":{"listChanged":true}},"serverInfo":{"name":"sds-mcp-server","version":"1.0.0"}}} : echo '{"jsonrpc":"2.0", "id":1, "method":"list/tools","params":{}}' | java -jar mcp-server-0.0.1-SNAPSHOT.jar
::::::::{"jsonrpc":"2.0","id":1,"error":{"code":-32601,"message":"Method not found: list/tools"}}
: echo '{"jsonrpc":"2.0", "id":1, "method":"tools/list","params":{}}' | java -jar mcp-server-0.0.1-SNAPSHOT.jar ::::::::: echo '{"jsonrpc":"2.0", "id":1, "method":"tools/resources","params":{}}' | java -jar mcp-server-0.0.1-SNAPSHOT.jar ::::::::{"jsonrpc":"2.0","id":1,"error":{"code":-32601,"message":"Method not found: tools/resources"}} : echo '{"jsonrpc":"2.0", "id":1, "method":"list/resources","params":{}}' | java -jar mcp-server-0.0.1-SNAPSHOT.jar ::::::::{"jsonrpc":"2.0","id":1,"error":{"code":-32601,"message":"Method not found: list/resources"}} : echo '{"jsonrpc":"2.0", "id":1, "method":"resources/list","params":{}}' | java -jar mcp-server-0.0.1-SNAPSHOT.jar :::::::::

Environment Windows 11 properties file spring.application.name=mcp-server

spring.ai.mcp.server.type=SYNC spring.ai.mcp.server.name=my-mcp-server spring.ai.mcp.server.version=1.0.0

spring.ai.mcp.server.stdio=true spring.main.web-application-type=none spring.main.banner-mode=off logging.pattern.console=: logging.file.name=./log/mcp-server.log

Steps to reproduce Build the MCP server with a few tools and a resource Run JSON RPC commands from the command line

Expected behavior Could be developer error here

Minimal Complete Reproducible example Example above

Comment From: wilocu

I have a couple of questions. Exact JSON commands you're using for testing: - What's your tools/list request format? - What's your resources/list request format? Response details: - Are you getting HTTP errors, empty responses, or JSON parsing errors? - Any error messages in your server logs? Testing method: - How are you sending the JSON RPC commands? (curl, Postman, CLI pipe, etc.) - Are you using STDIO or HTTP transport?

Comment From: jayhamilton

I am using the echo command to pass a JSON string to the SpringBoot MCP server. I am using STDIO and sending commands using a pipe, not using http.

JSONRPC MCP initialize request:

echo '{"jsonrpc":"2.0", "id":1, "method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{"roots":{"listChanged":true}, "sampling":{}}, "clientInfo":{"name":"test-client","version":"1.0.0"}}}' | java -jar mcp-server-0.0.1-SNAPSHOT.jar

JSONRPC MCP successful initialize response:

:::::::::{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"completions":{},"logging":{},"prompts":{"listChanged":true},"resources":{"subscribe":false,"listChanged":true},"tools":{"listChanged":true}},"serverInfo":{"name":"sds-mcp-server","version":"1.0.0"}}}

tools/list request:

echo '{"jsonrpc":"2.0", "id":1, "method":"tools/list","params":{}}' | java -jar mcp-server-0.0.1-SNAPSHOT.jar

Empty tools/list response: :::::::::

There should be 3 tools presented.

Note that when I configure VSCode with the MCP server, the JSONRPC seems to be working fine for the initialize and tools/list commands. VSCode shows the server and the tools list. However, I sometimes see the resource content show up in VS Code, but I think it is used when I perform prompts.

Comment From: jayhamilton

update ... just started the MCP server in VSCode today, after an update to the VSCODE MCP server extension. When starting my MCP server in VSCode, the VSCode logs show the following:

2025-08-06 11:19:19.741 [info] Starting server from LocalProcess extension host
2025-08-06 11:19:19.743 [info] Connection state: Starting
2025-08-06 11:19:19.743 [info] Connection state: Running
2025-08-06 11:19:22.690 [warning] Failed to parse message: "::::::::::{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{\"completions\":{},\"logging\":{},\"prompts\":{\"listChanged\":true},\"resources\":{\"subscribe\":false,\"listChanged\":true},\"tools\":{\"listChanged\":true}},\"serverInfo\":{\"name\":\"sds-mcp-server\",\"version\":\"1.0.0\"}}}\n"
2025-08-06 11:19:24.705 [info] Waiting for server to respond to `initialize` request...
2025-08-06 11:19:29.706 [info] Waiting for server to respond to `initialize` request...
2025-08-06 11:19:34.695 [info] Waiting for server to respond to `initialize` request...
2025-08-06 11:19:39.697 [info] Waiting for server to respond to `initialize` request...
2025-08-06 11:19:44.697 [info] Waiting for server to respond to `initialize` request...

Comment From: jayhamilton

Tested with this script produced by GenAI:

import subprocess
import json

# Start the server process
proc = subprocess.Popen(
    ["java", "-jar", "mcp-server-0.0.1-SNAPSHOT.jar"],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    text=True,
    bufsize=1
)

def send_request(request):
    proc.stdin.write(json.dumps(request) + "\n")
    proc.stdin.flush()
    print(proc.stdout.readline())

# Initialize
send_request({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
        "protocolVersion": "2024-11-05",
        "capabilities": {"roots": {"listChanged": True}, "sampling": {}},
        "clientInfo": {"name": "test-client", "version": "1.0.0"}
    }
})

# List tools
send_request({
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list",
    "params": {}
})

# List resources
send_request({
    "jsonrpc": "2.0",
    "id": 3,
    "method": "resources/list",
    "params": {}
})

proc.terminate()

Comment From: jayhamilton

The script produces the same behavior. It successfully sends the initialize request and prints the expected response and then indicates it is issuing the send request with the tools/list method and then just sits there not responding.