# Reported issues for mcp-server-zotero-dev

Pod holds 7 of 7 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [mcp-server-zotero-dev](/mcp/mcp-server-zotero-dev).

## Most discussed

### `zotero_db_query` always fails: "result.columns.join is not a function"

## Summary

`zotero_db_query` fails on every query, including trivial ones. `zotero_db_schema` is affected by the same underlying cause. Two independent defects are involved — either one alone is sufficient to break the tool.

## Environment

| | |
|---|---|
| `@introfini/mcp-server-zotero-dev` | 1.1.2 (latest on npm) |
| Zotero | 9.0.6 (Firefox 140 platform) |
| MCP Bridge for Zotero plugin | 1.0.5 |
| OS / Node | macOS 15 / Node 22 |

## Minimal reproduction

With Zotero running and the RDP br

[Read the thread](https://github.com/introfini/mcp-server-zotero-dev/issues/20) · 2026-08-16 · closed · outside contributor · 2 comments

### openListener() reports success when another process holds the port; health check then reopens every 10s forever

## Summary

When another process already holds the RDP port, `openListener()` reports **success** — at startup and on every health-check reopen — while the bridge is not actually serving. The plugin's internal notion of "listening" stays wrong for as long as the conflict lasts, and the health check reopens on a 10s loop indefinitely.

## Why it happens

`SocketListener.open()` does not reject when the port is already bound (Mozilla server sockets set `SO_REUSEADDR`; on Windows a second bind is a

[Read the thread](https://github.com/introfini/mcp-server-zotero-dev/issues/19) · 2026-07-31 · open · outside contributor · 1 comment

### MCP tool surface audit: add safety/trigger language for execute, scaffold, and log tools

Hi, I ran a deterministic MCP tool-surface audit against the Zotero dev MCP tool definitions and found a few places where description and profile hints could improve agent safety.

Scope: static audit from `packages/mcp-server/src/tools/*.ts`, not a live runtime test.

## Summary

- 25 tools detected.
- Average discoverability score: 75/100.
- Lowest-scoring tools: 56/100.
- 4 of 25 tools score below 60.
- 25 of 25 tools are missing explicit "Use when" trigger language.
- 12 write tools lack exp

[Read the thread](https://github.com/introfini/mcp-server-zotero-dev/issues/11) · 2026-06-21 · closed · external user · 2 comments

### evaluateJS silently re-executes side effects after connection drops; pending requests hang 30s on socket close

## Summary

Two related reply-loss problems in `RDPClient` (`packages/mcp-server/src/rdp/client.ts`):

1. **`evaluateJS` re-sends the same code after a connection error.** A connection drop loses the *reply*, not necessarily the request — `evaluateJSAsync` may already have executed in Zotero. The blind resend then runs the code's side effects twice. This is dangerous for non-idempotent tool calls (`zotero_plugin_install`, UI mutations, DB-adjacent scripts).

2. **`handleClose()` leaves pending r

[Read the thread](https://github.com/introfini/mcp-server-zotero-dev/issues/5) · 2026-06-10 · closed · outside contributor · 0 comments

### RDP client frames outbound packets with UTF-16 char count — non-ASCII payloads corrupt the stream

## Summary

`RDPClient.sendMessage()` (`packages/mcp-server/src/rdp/client.ts`) frames outbound packets with

```ts
const packet = `${json.length}:${json}`;
```

but the RDP `<length>:<json>` prefix is the **UTF-8 byte length**, and `json.length` is the UTF-16 character count. Any non-ASCII character in an outbound payload (emoji or accented text inside `zotero_execute_js` code, search strings, etc.) understates the length: the receiving transport reads a truncated JSON document, the stream desy

[Read the thread](https://github.com/introfini/mcp-server-zotero-dev/issues/4) · 2026-06-10 · closed · outside contributor · 0 comments

### Bridge plugin health check closes the live RDP listener every 2s — port refuses most connections

## Summary

The bridge plugin's "health check" (`packages/zotero-plugin-mcp-rdp/src/bootstrap.js`) calls `openListener()` every 2 seconds, and `openListener()` unconditionally **closes the live listener** before rebinding. The comment says a re-open "will fail harmlessly (port in use)" — but since the close frees the port first, the re-open always succeeds. The listening socket is therefore torn down and recreated every 2 seconds for the entire Zotero session.

## Measured impact (Windows 11, Zo

[Read the thread](https://github.com/introfini/mcp-server-zotero-dev/issues/3) · 2026-06-10 · closed · outside contributor · 2 comments

### MCP server cannot communicate with Zotero bridge plugin on Windows

Thanks so much for building this -- it'd be a great help, but I'm not currently getting it to work.

I have the MCP server show up in clode and the bridge plugin in Zotero 8.0.2-beta.1+62894d56e (64-bit). When I ask Claude code to do anything, I get an incoming communication message pop-up in Zotero, which I OK (could there be a way to permanently allow that rather then having to OK for every communication?). After that, Claude says it's not getting anything back and just keeps waiting until I e

[Read the thread](https://github.com/introfini/mcp-server-zotero-dev/issues/1) · 2026-01-30 · closed · external user · 3 comments

## Most recent

The remaining reports are on [the project's issue tracker](https://github.com/introfini/mcp-server-zotero-dev/issues).
