Skip to content

search_thoughts and list_thoughts omit thought UUIDs, so IDs are only obtainable via the ChatGPT-compat search tool #457

Description

@TheAlphaEngineer

Observed on main @ 67791060 (server/index.ts), during end-to-end testing of a live deployment.

What happens

search_thoughts and list_thoughts format their results without the row id:

  • search_thoughts renders --- Result N (X% match) ---, captured date, type, topics, people, actions, and content — but no id. (match_thoughts already returns id; it just isn't printed.)
  • list_thoughts renders N. [date] (type - topics)\n content — no id, and its .select("content, metadata, created_at") doesn't even fetch the id.

The only read tool that returns ids is search (the ChatGPT/connector-compat tool returning { id, title, url }), and fetch requires an id.

Why it matters

update_thought and delete_thought require a UUID. A user working through the primary human-facing read tools can see a thought but cannot obtain its id to update or delete it — they must detour through the search compatibility tool, which returns a terser shape intended for ChatGPT connectors. The natural "find it → change/remove it" flow is broken for the main read tools.

Suggested fix

Include the id in both tools' output — a leading id: <uuid> line per result, or a structured field. search_thoughts already has t.id from match_thoughts; list_thoughts just needs id added to its .select(...).

Same underlying theme as the capture_thought "return the id" gap: the write/mutate tools need UUIDs that the read tools don't expose.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions