# `Phantom.Tracker`
[🔗](https://github.com/dbernheisel/phantom_mcp/blob/main/lib/phantom/tracker.ex#L4)

Track open streams so that notifications and requests can be sent to clients.

Add to your supervision tree:

    {Phoenix.PubSub, name: MyApp.PubSub},
    {Phantom.Tracker, [name: Phantom.Tracker, pubsub_server: MyApp.PubSub]},

For example, a request may need to elicit more input from the client, so the
first request stream will remain open, and the notification stream will send
and new request to the client, and the client will POST its response. The
new response connection will notify the first request connection with the result
and the tool can continue with the elicited information.

See `m:Phantom#module-persistent-streams` section for more information.

# `available?`

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `get_request`

Fetch the PID of the open request by ID

# `get_request_meta`

Fetch the full metadata map of the open request by ID

# `get_session`

Fetch the PID of the open session by ID

# `get_session_meta`

Get metadata for a tracked session.

  Falls back to process dictionary when Phoenix.Tracker is not tracking.
  

# `list_requests`

Return a list of all open requests

# `list_resource_listeners`

Return a list of all listening for resources

# `list_session_streams`

Return all tracked streams for a given session ID (across all nodes)

# `list_sessions`

Return a list of all open sessions

# `notify_elicitation_complete`

Notify tracked sessions that a URL elicitation has completed

# `notify_prompt_list`

Notify any listening MCP sessions that the list of prompts has updated

# `notify_resource_list`

Notify any listening MCP sessions that the list of prompts has updated

# `notify_resource_updated`

Notify any listening MCP sessions that the resource has updated

# `notify_tool_list`

Notify any listening MCP sessions that the list of tools has updated

# `requests_topic`

# `resource_subscription_topic`

# `sessions_topic`

# `subscribe_resource`

Subscribe the process to resource notifications from the PubSub on topic "phantom:resources"

# `track_in_flight`

Claim an in-flight JSON-RPC request for a session to prevent
double-dispatch when the same `tools/call` lands on two nodes
(e.g. proxy retry). Returns `:ok` if the claim is held by this
node alone, `:duplicate` if another node has already claimed it.

Stored on the `phantom:requests` topic alongside server-initiated
request tracking. The `{:in_flight, session_id, request_id}`
tuple key never collides with elicitation keys (binaries), so
both kinds of tracking share one replication stream.

The check is best-effort against Phoenix.Tracker replication
lag: two nodes racing can both see `:ok`. Callers should
treat this as a hint and combine with deterministic request
IDs for defence in depth.

# `track_request`

Track a request PID

# `track_session`

Track a session PID

# `unsubscribe_resource`

Unsubscribe the process to resource notifications from the PubSub on topic "phantom:resources"

# `untrack`

Untrack the processe for everything

# `untrack_in_flight`

Release an in-flight claim taken by `track_in_flight/2`.

# `untrack_request`

Untrack any processes for the request

# `untrack_session`

Untrack any processes for the session

# `update_session_meta`

Update metadata for a tracked session.

  Falls back to process dictionary when Phoenix.Tracker is not tracking
  (e.g. stdio transport).
  

---

*Consult [api-reference.md](api-reference.md) for complete listing*
