Skip to content

Signals MCP and Events

Use list_signal_events from your agent or consume hiring.job_observed through experimental MCP Events polling.

Updated · View as Markdown

Use Signals in your MCP client

Connect your workspace using the MCP setup guide. The normal remote server is https://mcp.pumpgtm.com/mcp. Custom clients can use their workspace bearer key at https://app.pumpgtm.com/api/v1/mcp.

Ask your agent to find companies hiring sales development representatives, show the job evidence, and prepare an account-research list. Call list_signal_types to discover the platform catalog and availability. The ordinary list_signal_events tool reads an available type without the Events extension:

{
  "name": "list_signal_events",
  "arguments": {
    "name": "hiring.job_observed",
    "filters": {
      "roles": ["Sales Development Representative"],
      "minHeadcount": 10,
      "maxHeadcount": 200
    },
    "start": "recent",
    "limit": 10
  }
}

The structured result matches the REST response. Reads use 0 Energy during the developer preview. The agent can separately research people; this tool never starts outreach.

Try experimental MCP Events

The MCP Triggers & Events working group is developing the extension. It is an experimental proposal, not a finalized standard. PumpGTM implements the polling shape from this pinned design revision.

PumpGTM advertises experimental.events and implements events/list and events/poll. Only poll is available. Streaming, webhook subscriptions, and automatic assistant wake-up are not part of this preview.

Discover the event type:

{ "jsonrpc": "2.0", "id": 1, "method": "events/list", "params": {} }

The result describes hiring.job_observed, its filter schema, payload schema, and delivery: ["poll"].

Start from now:

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "events/poll",
  "params": {
    "name": "hiring.job_observed",
    "arguments": { "roles": ["Sales Development Representative"] },
    "cursor": null,
    "maxEvents": 50
  }
}

The first response is empty and supplies a cursor. Poll again with that exact cursor and the same arguments. A null or omitted cursor always means start now. To backfill first, call list_signal_events with name: "hiring.job_observed" and start: "recent", finish paging, and continue Events polling with its cursor and identical filters.

The response contains events, cursor, hasMore, truncated, and nextPollMs. maxEvents accepts 1–100. Optional maxAgeMs accepts 1–2,592,000,000 milliseconds and limits replay by observation age. A raised age floor can skip older events and returns truncated: true; handle this explicitly. An invalid or expired cursor returns a protocol error with data.code set to invalid_cursor or cursor_expired.

Client compatibility

Existing open-source implementations include mcpkit's experimental Go client and Python reference client. They provide concrete Events integration examples. Authentication, draft revision, transport framing, and delivery-mode support differ between clients; this is not a claim that their CLI defaults connect unchanged to PumpGTM.

Use PumpGTM's Python polling demo for this endpoint. It uses a workspace key and saves events, review tasks, and the cursor in one SQLite transaction. It supports recent backfill and resumes after restart. It creates local review tasks only.

export PUMPGTM_KEY="your workspace key"
python3 hiring-events.py --recent --once
python3 hiring-events.py --once

Keep the same filters and state file when resuming. The demo binds stored state to the endpoint, filters, and key fingerprint. --replay repeats the previous page and demonstrates that its local task count does not increase for duplicate event IDs.

Mainstream MCP clients can use the ordinary list_signal_events tool. We do not claim their hosts support background Events delivery. A custom client owns its polling loop, error handling, cursor storage, and any decision to invoke an agent.

Make one action per event

Events may be delivered repeatedly. Commit the event ID with the local action before advancing the cursor. For an external CRM, use its idempotency mechanism or a transactional outbox. A saved cursor alone cannot make an external side effect exactly-once.

See coverage, timestamps, and cursor retention before building an automation.

Questions or a missing endpoint: hello@pumpgtm.com.