Organized
This commit is contained in:
@@ -220,6 +220,22 @@ The stdio server supports both MCP framing styles used by clients in the wild:
|
||||
|
||||
Responses mirror the detected input framing mode for compatibility.
|
||||
|
||||
### JSON-RPC response normalization (2026-07-10)
|
||||
|
||||
When running under Hermes's current Python MCP client, JSON-RPC responses with
|
||||
`result` as a top-level JSON array (for example `[]`) can trigger repeated
|
||||
Pydantic validation errors in `mcp.client.stdio`, followed by reconnect loops.
|
||||
|
||||
To prevent that log spam and reconnect churn, redMCP now normalizes list-style
|
||||
JSON-RPC results at the dispatcher boundary:
|
||||
|
||||
- associative arrays (objects) pass through unchanged
|
||||
- list arrays are wrapped as `{ "items": [...] }`
|
||||
- empty list results are wrapped as `{ "items": [] }`
|
||||
|
||||
This keeps response payloads object-shaped for broad client compatibility while
|
||||
preserving the underlying data.
|
||||
|
||||
For local testing, run the Streamable HTTP server:
|
||||
|
||||
```sh
|
||||
@@ -336,6 +352,24 @@ customer-visible mail require an explicit tool call such as
|
||||
`redmine_send_helpdesk_response` or `redmine_update_issue` with
|
||||
`send_helpdesk_email=true`.
|
||||
|
||||
All MCP tools also accept optional `impersonate_user` to run the call as a
|
||||
specific Redmine login when the configured API account has permission to switch
|
||||
users. When omitted, calls run as the configured API user.
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "redmine_update_issue",
|
||||
"arguments": {
|
||||
"impersonate_user": "jason",
|
||||
"issue_id": 39858,
|
||||
"notes": "Replying as Jason via MCP"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This applies to the entire tool call, including multi-step actions such as
|
||||
`redmine_update_issue` with `send_helpdesk_email=true`.
|
||||
|
||||
Run the local no-network query normalizer checks with:
|
||||
|
||||
```sh
|
||||
|
||||
Reference in New Issue
Block a user