Connect
One endpoint, https://hunter-seeker.io/api/mcp — Streamable HTTP with OAuth 2.1, or an hsk_ machine key for anything running without a human present. Nine clients, and the thing that goes wrong in each.
Claude Code
a terminal, in the project you want it in
claude mcp add --transport http hunter-seeker https://hunter-seeker.io/api/mcp
⚠ Add `--header "Authorization: Bearer hsk_..."` to use a machine key instead of the browser OAuth flow. Scope is per-project by default — pass `--scope user` to make it available everywhere.
Claude Desktop
`claude_desktop_config.json` (Settings → Developer → Edit Config)
{
"mcpServers": {
"hunter-seeker": {
"type": "http",
"url": "https://hunter-seeker.io/api/mcp"
}
}
}⚠ Quit and reopen the app — Claude Desktop reads this file at launch, and the tray icon staying up counts as still running.
Cursor
`.cursor/mcp.json` in the project, or `~/.cursor/mcp.json` globally
{
"mcpServers": {
"hunter-seeker": {
"type": "http",
"url": "https://hunter-seeker.io/api/mcp"
}
}
}⚠ A window reload is not enough; restart Cursor fully. Check Settings → MCP for a green dot before assuming the tools are there.
Windsurf
`~/.codeium/windsurf/mcp_config.json`
{
"mcpServers": {
"hunter-seeker": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://hunter-seeker.io/api/mcp"
]
}
}
}⚠ Windsurf speaks stdio, so a remote server needs the `mcp-remote` bridge — the shape above is different from every other entry on this page for that reason. Hit Refresh in the Cascade MCP panel afterwards.
VS Code (Copilot)
`.vscode/mcp.json` in the workspace
{
"servers": {
"hunter-seeker": {
"type": "http",
"url": "https://hunter-seeker.io/api/mcp"
}
}
}⚠ The top-level key is `servers`, NOT `mcpServers`. A file with `mcpServers` is read, found to contain no servers, and ignored without an error.
ChatGPT
Settings → Connectors → Add custom connector
⚠ No config file — paste the URL and complete the OAuth flow in the browser. Connectors are an account-level setting, so it appears in every conversation once added, not just this one.
n8n
the **MCP Client Tool** node, wired into an AI Agent node
⚠ Set the endpoint and pick Bearer auth with an `hsk_` machine key — an n8n workflow runs with no human present, so the browser OAuth flow is the wrong on-ramp for it.
LangGraph
`langchain-mcp-adapters`, in code
{
"hunter-seeker": {
"url": "https://hunter-seeker.io/api/mcp",
"transport": "streamable_http"
}
}⚠ Pass the dict above to `MultiServerMCPClient` and `await client.get_tools()`. The transport string is `streamable_http` with an underscore; `streamable-http` is not accepted.
Agentforce
Setup → External Services → MCP Servers
⚠ Registered per org, with a named credential for OAuth. The tools have to be added to an agent topic explicitly — registering the server alone does not put them in front of the agent.
The 15 tools
Exactly one costs a run. This list is rendered from the server’s own tools/list, so it is what you will actually be offered — not a copy of it.
6 free samples — see a result before you hand over anything
Every one is synthetic, costs nothing, and clears the bar. Pass the id straight as data.dataset_id; a sample run never takes a reserve from your quota.
sample:saas_churn800 synthetic SaaS accounts with tenure, support tickets, logins, plan and seats. Which accounts are most likely to churn?
outcome_column: "churned" · entity_column: "customer_id" · subject_kind: "org" · 800 rows · synthetic
Clears at lift 4.4776, top-decile lift 4.444444.
sample:b2b_leads800 synthetic B2B leads with pages viewed, demo requests, company size and touch latency. Which leads are most likely to convert?
outcome_column: "converted" · entity_column: "lead_id" · subject_kind: "org" · 800 rows · synthetic
Clears at lift 7.3469, top-decile lift 5.263158.
sample:telco_churn800 synthetic telecom accounts with contract type, tech support, tenure and charges. Which accounts are most likely to churn?
outcome_column: "churned" · entity_column: "account_id" · subject_kind: "org" · 800 rows · synthetic
Clears at lift 3.9216, top-decile lift 6.190476.
sample:agent_traces800 synthetic AI-agent runs (agent, task, tool, 0/1 failed) with a tool that degrades mid-window. Built for reading {kind: "trace", version: 1} — ranked raw it returns an honest non-finding; reduced, the per-group prior failure rates clear high-tier. Which runs are most likely to fail?
outcome_column: "failed" · entity_column: "run_id" · subject_kind: "event" · 800 rows · synthetic
Ranked raw this one is an honest non-finding, on purpose — that is a result, not an error, and retrying it is the mistake. Add the reading below and it clears.
{
"reading": {
"kind": "trace",
"version": 1,
"roles": {
"identifier": "run_id",
"time_axis": "ts",
"outcome": "failed",
"agent": "agent",
"task": "task",
"tool": "tool"
}
}
}Clears at lift 4.1026, top-decile lift 4.285714.
sample:usage_panel9,600 rows: 800 synthetic SaaS accounts observed over 12 monthly periods, with usage, logins, feature adoption, support tickets and seats. The `usage_declining` column is a noisy per-period self-report and ranks to nothing on its own. Built for reading {kind: "panel", version: 1} with a `trend` label — the engine derives the real declining/not label from the shape of `usage` and clears. Which accounts are on their way out?
outcome_column: "usage_declining" · entity_column: "account_id" · subject_kind: "org" · 9600 rows · synthetic
Ranked raw this one is an honest non-finding, on purpose — that is a result, not an error, and retrying it is the mistake. Add the reading below and it clears.
{
"reading": {
"kind": "panel",
"version": 1,
"roles": {
"identifier": "account_id",
"time_axis": "period"
},
"params": {
"label_horizon": 1,
"label_agg": "max",
"min_observation": 5,
"trend_direction": "down",
"trend_alpha": 0.1,
"cutoff_rule": "last_minus_label",
"label": {
"kind": "trend",
"column": "usage"
}
}
}
}Clears at lift 2.5478, top-decile lift 2.539683.
sample:sensor_stream4,815 rows: four signals from 40 synthetic machines every six hours for 30 days, with the fault intervals in the same table (a row with an `event_type` is an interval, not a reading). The `maintenance_due` flag is noise and ranks to nothing. Built for reading {kind: "stream", version: 1} — reduced to daily snapshots with trailing window aggregates it clears high-tier. Which machines are about to fail?
outcome_column: "maintenance_due" · entity_column: "asset_id" · subject_kind: "object" · 4815 rows · synthetic
Ranked raw this one is an honest non-finding, on purpose — that is a result, not an error, and retrying it is the mistake. Add the reading below and it clears.
{
"reading": {
"kind": "stream",
"version": 1,
"roles": {
"identifier": "asset_id",
"time_axis": "ts",
"signals": [
"vibration",
"temp_c",
"pressure_psi",
"current_a"
],
"event_type": "event_type",
"event_start": "event_start",
"event_end": "event_end",
"label_column": "maintenance_due"
},
"params": {
"snapshot_period": "1d",
"windows": [
1,
3,
7
],
"horizon": 3,
"min_observation": 3
}
}
}Clears at lift 3.2448, top-decile lift 7.518539.
What every response carries
Engine pin. Every response carries {engine_version, core_hash}. Current: engine 0.3.5, core 4d24e9fc….
Reading contract. A separate identity axis — it moves when the reading kinds change, which core_hash cannot see, so pin whichever you depend on. Current: 40498adb…, grammar version 3.
A Verdict is checked against /.well-known/jwks.json, served open and credential-free. The machine-readable server cards are /.well-known/mcp.json and /.well-known/mcp/server.json; the full tool descriptions are in llms-full.txt.