<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Data Reaktor</title>
    <description>The latest articles on DEV Community by Data Reaktor (@datareaktor).</description>
    <link>https://dev.to/datareaktor</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4202894%2F59e25651-0d5c-4247-a71d-b246261f131a.png</url>
      <title>DEV Community: Data Reaktor</title>
      <link>https://dev.to/datareaktor</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/datareaktor"/>
    <language>en</language>
    <item>
      <title>How to give your AI agent a job search networking tool with MCP or a REST API</title>
      <dc:creator>Data Reaktor</dc:creator>
      <pubDate>Fri, 23 Oct 2026 14:59:17 +0000</pubDate>
      <link>https://dev.to/datareaktor/how-to-give-your-ai-agent-a-job-search-networking-tool-with-mcp-or-a-rest-api-3ilk</link>
      <guid>https://dev.to/datareaktor/how-to-give-your-ai-agent-a-job-search-networking-tool-with-mcp-or-a-rest-api-3ilk</guid>
      <description>&lt;p&gt;Data Reaktor is a job search desk. For a job seeker's target companies, it finds the people inside from public sources, scores a warm path to each one from 0 to 100, and drafts intros that the person sends themselves. It never sends anything.&lt;/p&gt;

&lt;p&gt;This post shows how an agent can sign itself up, run one search and get one draft back. Every endpoint here comes from our public AGENTS.md. The IDs in the examples are illustrative.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the agent gets
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A remote MCP server at &lt;code&gt;https://www.datareaktor.ai/mcp&lt;/code&gt; over Streamable HTTP&lt;/li&gt;
&lt;li&gt;The same operations over REST at &lt;code&gt;https://www.datareaktor.ai/api/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;An OpenAPI spec at &lt;code&gt;/api/v1/openapi.json&lt;/code&gt;, plus &lt;code&gt;llms.txt&lt;/code&gt; and &lt;code&gt;/.well-known/agent.json&lt;/code&gt; for discovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some rules are built into the API, so your agent cannot break them by accident. People come from public sources only, and each person has a source URL. LinkedIn is never fetched or logged into. Emails appear only when they were found on a public page. Drafts come back with &lt;code&gt;"delivery": "user_sends"&lt;/code&gt;, and &lt;code&gt;mark_sent&lt;/code&gt; only works when the user reports that they sent the message.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: register the agent
&lt;/h2&gt;

&lt;p&gt;There is no sign up form, email or captcha. One request gets a key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://www.datareaktor.ai/api/v1/agents/register &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{ "name": "my-job-search-agent", "acceptTerms": true }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;name&lt;/code&gt; must be unique and 3 to 64 characters. &lt;code&gt;acceptTerms&lt;/code&gt; must be &lt;code&gt;true&lt;/code&gt; (the terms are at datareaktor.ai/terms-of-service). You can also send an optional &lt;code&gt;purpose&lt;/code&gt; of up to 280 characters and a &lt;code&gt;homepage&lt;/code&gt;. The response is a 201 with your API key. It is shown once, so store it.&lt;/p&gt;

&lt;p&gt;The trial is 300 credits for 60 days, 60 requests per minute and 60 lookups per day. &lt;code&gt;GET /api/v1/agent/account&lt;/code&gt; shows credits left. Costs are 5 credits per company for people discovery, 2 per warm path score, 6 per draft and 5 per contact lookup. No card is ever charged, and a refused call charges nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: connect over MCP
&lt;/h2&gt;

&lt;p&gt;For Cursor, add this to &lt;code&gt;~/.cursor/mcp.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"data-reaktor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.datareaktor.ai/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"X-API-Key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"drk_live_YOUR_KEY_HERE"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Desktop uses the same block with &lt;code&gt;"transport": "streamable-http"&lt;/code&gt; added. Hosted connectors that only speak OAuth, like the ChatGPT and claude.ai connectors, do not work yet. OAuth 2.1 is planned. Until then, use a key from your own client or code.&lt;/p&gt;

&lt;p&gt;A typical tool flow: &lt;code&gt;get_setup_status&lt;/code&gt;, &lt;code&gt;create_search&lt;/code&gt;, &lt;code&gt;add_target_company&lt;/code&gt;, &lt;code&gt;estimate_cost&lt;/code&gt;, &lt;code&gt;find_inside_people&lt;/code&gt;, &lt;code&gt;get_job&lt;/code&gt;, &lt;code&gt;list_people&lt;/code&gt;, &lt;code&gt;draft_intro&lt;/code&gt;. There are 46 tools in total, and every one maps to a REST endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: the same run over REST
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"drk_live_YOUR_KEY_HERE"&lt;/span&gt;
&lt;span class="nv"&gt;API&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://www.datareaktor.ai/api/v1"&lt;/span&gt;

&lt;span class="c"&gt;# 1. Create a search&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$API&lt;/span&gt;&lt;span class="s2"&gt;/searches"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-API-Key: &lt;/span&gt;&lt;span class="nv"&gt;$KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{ "name": "Senior PM, fintech", "targetLevel": "senior" }'&lt;/span&gt;

&lt;span class="c"&gt;# 2. Add a target company (no charge yet)&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$API&lt;/span&gt;&lt;span class="s2"&gt;/searches/12/targets"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-API-Key: &lt;/span&gt;&lt;span class="nv"&gt;$KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{ "companies": [ { "companyName": "Fernhill Payments", "domain": "fernhill.example" } ] }'&lt;/span&gt;

&lt;span class="c"&gt;# 3. Estimate, then start discovery with a hard cap&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$API&lt;/span&gt;&lt;span class="s2"&gt;/estimate"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-API-Key: &lt;/span&gt;&lt;span class="nv"&gt;$KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{ "searchId": 12, "draftsPerTarget": 0 }'&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$API&lt;/span&gt;&lt;span class="s2"&gt;/searches/12/people:discover"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-API-Key: &lt;/span&gt;&lt;span class="nv"&gt;$KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{ "max_credits": 60, "draftsPerTarget": 0 }'&lt;/span&gt;

&lt;span class="c"&gt;# 4. Poll the job until it is completed, failed or cancelled&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$API&lt;/span&gt;&lt;span class="s2"&gt;/jobs/JOB_ID"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-API-Key: &lt;/span&gt;&lt;span class="nv"&gt;$KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# 5. List people, with sources and ranked paths&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$API&lt;/span&gt;&lt;span class="s2"&gt;/searches/12/people"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-API-Key: &lt;/span&gt;&lt;span class="nv"&gt;$KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# 6. Draft an intro for one person (returned, never sent)&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$API&lt;/span&gt;&lt;span class="s2"&gt;/people/31/drafts"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-API-Key: &lt;/span&gt;&lt;span class="nv"&gt;$KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{ "mode": "connector_ask" }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Discovery runs as a background job. The call returns a 202 with a &lt;code&gt;job_id&lt;/code&gt; and a &lt;code&gt;poll&lt;/code&gt; URL, and &lt;code&gt;max_credits&lt;/code&gt; is required so the agent cannot overspend. Discovery finds up to 5 people per company. &lt;code&gt;draftsPerTarget&lt;/code&gt; defaults to 0 for agent keys, so you only pay for drafts you ask for. Draft modes are &lt;code&gt;connector_ask&lt;/code&gt;, &lt;code&gt;hiring_manager_note&lt;/code&gt;, &lt;code&gt;alumni_note&lt;/code&gt;, &lt;code&gt;follow_up&lt;/code&gt; and &lt;code&gt;thank_you&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Your agent should show the estimate to the user and ask before step 3. AGENTS.md says the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: hand the draft to the human
&lt;/h2&gt;

&lt;p&gt;The draft is plain text. The user reads it, edits it and sends it from their own account. After they confirm, the agent records it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$API&lt;/span&gt;&lt;span class="s2"&gt;/drafts/77/mark-sent"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-API-Key: &lt;/span&gt;&lt;span class="nv"&gt;$KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{ "user_reported": true, "channel": "linkedin" }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A follow up then comes due 5 business days later, and &lt;code&gt;list_followups&lt;/code&gt; returns it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making paths warmer
&lt;/h2&gt;

&lt;p&gt;Warm path scores get better when the user imports their LinkedIn &lt;code&gt;Connections.csv&lt;/code&gt; with &lt;code&gt;import_connections&lt;/code&gt;. The score is deterministic: first degree, former colleague, alumni, mutual connection or cold. Without the file, most paths start cold.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;p&gt;60 requests per minute per key, 40 drafts per day, and up to 5 people per company. Errors are JSON with a stable &lt;code&gt;code&lt;/code&gt;, a &lt;code&gt;retryable&lt;/code&gt; flag and &lt;code&gt;nextSteps&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Agent docs: &lt;a href="https://www.datareaktor.ai/agents?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=gtm-w1-2026-10&amp;amp;utm_content=article-mcp-quickstart" rel="noopener noreferrer"&gt;https://www.datareaktor.ai/agents?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=gtm-w1-2026-10&amp;amp;utm_content=article-mcp-quickstart&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Full reference: &lt;a href="https://www.datareaktor.ai/AGENTS.md?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=gtm-w1-2026-10&amp;amp;utm_content=article-agentsmd" rel="noopener noreferrer"&gt;https://www.datareaktor.ai/AGENTS.md?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=gtm-w1-2026-10&amp;amp;utm_content=article-agentsmd&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenAPI: &lt;a href="https://www.datareaktor.ai/api/v1/openapi.json" rel="noopener noreferrer"&gt;https://www.datareaktor.ai/api/v1/openapi.json&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are the job seeker rather than the agent builder, the web app is free during the beta, no card: &lt;a href="https://www.datareaktor.ai/sign-up?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=gtm-w1-2026-10&amp;amp;utm_content=article-signup" rel="noopener noreferrer"&gt;https://www.datareaktor.ai/sign-up?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=gtm-w1-2026-10&amp;amp;utm_content=article-signup&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>api</category>
      <category>career</category>
    </item>
  </channel>
</rss>
