Developers

MCP Server, REST API, and everything you need to build on OnlyData Club.

MCP Server

Manage professional identities from Claude Code, Claude Desktop, Cursor, or any MCP-compatible AI agent.

shell
# Install and run
npx @onlydata/mcp-server

# With API key for write access
ONLYDATA_API_KEY=od_xxx npx @onlydata/mcp-server

Claude Code config

~/.claude/settings.json
{
  "mcpServers": {
    "onlydata": {
      "command": "npx",
      "args": ["@onlydata/mcp-server"],
      "env": {
        "ONLYDATA_API_KEY": "od_your_key_here"
      }
    }
  }
}

MCP Tools

ToolAccessDescription
get_profilePublicGet a profile by slug
list_profilesPublicList all public profiles
search_profilesPublicSearch by name, headline, location
get_verificationPublicFull attribute provenance
create_profileAuthCreate a person or company profile
update_profileAuthUpdate profile fields
set_signalsAuthSet open-to signals (recruiting, advisory, etc.)
set_coop_sharingAuthEnable/disable cooperative sharing
send_messageAuthMessage another member
get_inboxAuthRead your messages
get_sent_messagesAuthView sent messages
verify_domainAuthVerify company domain ownership (DNS, file, or meta tag)
get_agent_readinessPublicAgent readiness scores (crawlability, API, MCP signals)

No tools match your search.

Access levels

No account needed

Search and read all public profiles, verification data, and metadata. Anyone — human or agent — can query OnlyData without authentication.

  • Browse and search all public profiles
  • Read full profile data (name, headline, about, roles, skills, projects)
  • Get verification and provenance JSON for any profile
  • Access OpenAPI spec, llms.txt, MCP manifest, sitemap

With account (API key)

Create an account at /join, then generate an API key in your profile settings. With a key you can:

  • Create and update your own profile
  • Set availability signals (open to recruiting, advisory, partnerships)
  • Send and receive messages from other members
  • Enable cooperative sharing (opt your profile into partner networks)
  • Configure what's shareable (email, phone, signals are all user-controlled)

REST API

Full OpenAPI 3.0 spec at /openapi.json. Key endpoints:

MethodEndpointAccess
GET/api/profilesPublic
GET/api/profile/:slugPublic
GET/api/profile/:slug/verificationPublic
GET/api/coop/profilesPublic
POST/api/claimAuth
PATCH/api/profile/:slugAuth
POST/api/profile/:slug/signalsAuth
POST/api/messages/sendAuth
GET/api/messages/inboxAuth
GET/api/verify-domain/instructions/:slugPublic
POST/api/verify-domain/:slugAuth
GET/api/agent-readinessPublic
GET/api/agent-readiness/:slugPublic
# List all profiles
curl https://onlydata.club/api/profiles

# Get a profile by slug
curl https://onlydata.club/api/profile/jane-doe

# Authenticated request
curl -H "x-api-key: od_your_key" \
  https://onlydata.club/api/me
// List all profiles
const res = await fetch('https://onlydata.club/api/profiles');
const { profiles } = await res.json();

// Authenticated request
const res = await fetch('https://onlydata.club/api/me', {
  headers: { 'x-api-key': 'od_your_key' }
});
import requests

# List all profiles
res = requests.get('https://onlydata.club/api/profiles')
profiles = res.json()['profiles']

# Authenticated request
res = requests.get(
    'https://onlydata.club/api/me',
    headers={'x-api-key': 'od_your_key'}
)

Authentication

Two methods — API key is recommended for MCP integrations and scripts. Supabase JWTs are used for browser sessions.

# API key (recommended)
curl -H "x-api-key: od_your_key" \
  https://onlydata.club/api/me

# Supabase JWT (browser sessions)
curl -H "Authorization: Bearer eyJ..." \
  https://onlydata.club/api/me
// API key
const res = await fetch('https://onlydata.club/api/me', {
  headers: { 'x-api-key': 'od_your_key' }
});

// Supabase JWT
const res = await fetch('https://onlydata.club/api/me', {
  headers: { 'Authorization': `Bearer ${token}` }
});
import requests

# API key
res = requests.get(
    'https://onlydata.club/api/me',
    headers={'x-api-key': 'od_your_key'}
)

# Supabase JWT
res = requests.get(
    'https://onlydata.club/api/me',
    headers={'Authorization': f'Bearer {token}'}
)

Domain Verification

Prove ownership of a company domain to get a verified badge. Three methods available — pick whichever fits your setup. Verified companies also auto-elevate team members whose email domains match.

Step 1: Get instructions

shell
curl https://onlydata.club/api/verify-domain/instructions/your-company

Step 2: Choose a method

MethodWhat to doBest for
dns Add TXT record: onlydata-verify=your-slug Recommended — strongest proof, works for any domain
file Host /.well-known/onlydata-verify.txt with your slug Easy if you control the web server
meta Add <meta name="onlydata-verify" content="your-slug"> to homepage Quick — just a one-line HTML change

Step 3: Trigger verification

# DNS verification
curl -X POST https://onlydata.club/api/verify-domain/your-company \
  -H "x-api-key: od_your_key" \
  -H "Content-Type: application/json" \
  -d '{"method": "dns"}'

# File verification
curl -X POST https://onlydata.club/api/verify-domain/your-company \
  -H "x-api-key: od_your_key" \
  -H "Content-Type: application/json" \
  -d '{"method": "file"}'

# Meta tag verification
curl -X POST https://onlydata.club/api/verify-domain/your-company \
  -H "x-api-key: od_your_key" \
  -H "Content-Type: application/json" \
  -d '{"method": "meta"}'
const res = await fetch('https://onlydata.club/api/verify-domain/your-company', {
  method: 'POST',
  headers: {
    'x-api-key': 'od_your_key',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ method: 'dns' })
});
import requests

res = requests.post(
    'https://onlydata.club/api/verify-domain/your-company',
    headers={'x-api-key': 'od_your_key'},
    json={'method': 'dns'}
)

On success

  • Profile gets verified status with green badge
  • Verification proof stored in profile_data.domain_verification
  • Team members with matching email domains are auto-elevated to verified

Admin override

Admins can verify any profile directly — no DNS/file check needed:

shell
curl -X POST https://onlydata.club/api/admin/verify/your-company \
  -H "x-admin-key: YOUR_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status": "verified", "domain": "yourcompany.com"}'

MCP tool

Agents can verify domains through the MCP server:

json
// Get instructions (omit method)
{ "tool": "verify_domain", "args": { "slug": "your-company" } }

// Attempt DNS verification
{ "tool": "verify_domain", "args": { "slug": "your-company", "method": "dns" } }

Agent Readiness Scores

Every OnlyData profile with a website is scanned for agent-readiness signals. Scores range 0–100 across six categories:

CategoryWhat it measures
Crawlabilityrobots.txt, sitemap.xml
Machine ReadabilityJSON-LD, schema.org, meta tags
API ReadinessOpenAPI spec, API docs links
Agentic Commerceai-plugin.json, MCP manifest, llms.txt
Content AccessRSS/Atom feeds, clean HTML
Agent SignalsExplicit MCP, LLM, and agent support
# All scores (ranked)
curl https://onlydata.club/api/agent-readiness

# Single profile
curl https://onlydata.club/api/agent-readiness/producthacker
// All scores
{ "tool": "get_agent_readiness" }

// Single profile
{ "tool": "get_agent_readiness", "args": { "slug": "producthacker" } }

Scans run on a periodic schedule. Scores include an AI-generated summary and full check details per profile.

Agent-readable files

FilePurpose
/llms.txtLLM-readable site description
/openapi.jsonOpenAPI 3.0 specification
/mcp.jsonMCP tool manifest
/.well-known/ai-plugin.jsonAI plugin manifest
/sitemap.xmlDynamic sitemap
/robots.txtCrawler rules (AI bots welcome)
shell
# Fetch LLM description
curl https://onlydata.club/llms.txt

# Fetch OpenAPI spec
curl https://onlydata.club/openapi.json

# Fetch MCP manifest
curl https://onlydata.club/mcp.json