Skip to content

Tool calls generated but not executed in chat completions endpoint #89

@mhdsulaimzed

Description

@mhdsulaimzed

I've been working with MCP-Bridge and ran into a frustrating issue where everything seems to work, but doesn't actually complete the job. When I use the /v1/chat/completions endpoint, MCP-Bridge successfully finds my tools, the LLM generates the right tool calls, but then... nothing. The tools never get executed and I just get back the raw tool calls instead of actual results.

The weird part? The direct tool API works perfectly. So I know my MCP servers are fine and my tools work correctly.

My setup
I'm running this on Kubernetes with:

MCP-Bridge Version: 0.5.1
Inference Engine: vLLM 0.9.2.dev129+gdac8cc49f.d20250617
Model: solidrust/Hermes-2-Pro-Llama-3-8B-AWQ (quantized)
Tool Call Parser: --tool-call-parser=hermes
MCP Server: Custom filesystem server using FastMCP

Configuration
Here's my MCP-Bridge config:

json{
  "inference_server": {
    "base_url": "http://192.168.5.10:30800/v1",
    "api_key": "None"
  },
  "mcp_servers": {
    "filesystem": {
      "command": "python3",
      "args": ["/app/src/mcp_server_filesystem.py", "/shared"]
    }
  },
  "network": {
    "host": "0.0.0.0",
    "port": 8000
  },
  "logging": {
    "log_level": "INFO"
  }
}

And my VLLM setup:

vllm serve solidrust/Hermes-2-Pro-Llama-3-8B-AWQ \
  --host=0.0.0.0 \
  --port=8000 \
  --quantization=awq \
  --served-model-name=hermes-2-pro-8b \
  --enable-auto-tool-choice \
  --tool-call-parser=hermes \
  --trust-remote-code

What I expected vs happened

I thought this would work like the OpenAI API - I send a chat message, the LLM decides it needs to use a tool, MCP-Bridge executes that tool, and I get back a complete response with the actual results.
Instead, I get back just the tool call itself, like the LLM is saying "I want to call this function" but nobody actually presses the button...

This works perfectly (direct tool API):

curl -X POST "http://localhost:8000/mcp/tools/list_directory/call" \
  -H "Content-Type: application/json" \
  -d '{"path": "mcp"}' | jq .

response:

{
  "_meta": null,
  "content": [
    {
      "type": "text",
      "text": "{'name': 'config.json', 'type': 'file', 'size': 346, 'modified': '2025-06-19 13:43:48', 'path': 'mcp/config.json'}"
    }
  ],
  "isError": false
}

greaat! My filesystem tool works and returns the actual directory contents

This doesn't work:

curl -X POST "http://localhost:8000/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "hermes-2-pro-8b",
    "messages": [
      {
        "role": "user", 
        "content": "List the contents of the mcp directory"
      }
    ],
    "tool_choice": "required",
    "stream": false
  }' | jq .

response

{
  "id": "chatcmpl-cfcb8863be734027a3ddd1104e3abcde",
  "choices": [{
    "finish_reason": "stop",
    "index": 0,
    "message": {
      "content": "",
      "tool_calls": [
        {
          "id": "chatcmpl-tool-a0fdd5d7c571404bb5efe7c08bfcb097",
          "type": "function",
          "function": {
            "name": "list_directory",
            "arguments": "{\"path\": \"mcp\"}"
          }
        }
      ],
      "role": "assistant"
    }
  }],
  "created": 1750434524,
  "model": "hermes-2-pro-8b",
  "usage": {
    "completion_tokens": 20,
    "prompt_tokens": 17,
    "total_tokens": 37
  }
}

See the problem? I get the tool call, but no execution, no results, no final answer. It's like getting a recipe that says "Step 1: Call the chef" and then just... stops there.

tools discovery works mcp/tools list al my tools available ,VLLM logs show it's creating the right tool calls with the correct parameters.MCP-Bridge never executes them,looking at MCP-Bridge logs, I see:

Processing request of type ListToolsRequest
INFO: POST /v1/chat/completions HTTP/1.1" 200 OK

It looks like MCP-Bridge is doing the first part of the job (tool injection and forwarding to the LLM) but missing the second part (actually executing the tools and completing the conversation).
The flow should be:

Get chat request -works
Inject MCP tools works
Send to VLLM works
Get tool calls back works
Execute the tool calls -this part is broken
Send results back to VLLM -never happens
Return final response -- never happens

I know this is a pretty detailed bug report, but I wanted to be thorough since this seems like a core functionality issue that probably affects anyone trying to use MCP-Bridge with tool-calling models. Let me know if you need any more details or want me to test anything specific!, i am not sure if i am doing it correct , any super heroes... that can help me figure out??

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions