技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
datacircle【数据与研究】Look up LinkedIn profiles by URL through Datacircle (Up2Data, HarvestAPI or Fetchin, no markup), over its hosted MCP server or REST API, with the user's yes before each paid call.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Datacircle is a data co-op. Query your favorite B2B data APIs through us. Same request, same price, no markup.
You send the provider's own request to api.datacircle.dev, with your Datacircle key. That's the only change. Right now we have 3 live LinkedIn profile APIs that we trust: Up2Data, HarvestAPI and Fetchin. Each request goes to the provider and gets the profile as it is today.
This skill covers both ways in, the hosted MCP server and the REST API: which provider to pick, asking before every paid lookup, reading the cost and balance on each answer, and the errors.
402 or 429.https://api.datacircle.dev/mcp (Streamable HTTP), in the official MCP registry as dev.datacircle/datacircle.claude mcp add --transport http datacircle https://api.datacircle.dev/mcp, then run /mcp to sign in. In Claude (Settings, Connectors) and ChatGPT (developer mode), add the same URL as a custom connector. The first time, your client signs you in with your Datacircle email (OAuth). Or send your API key as a Bearer token:claude mcp add --transport http datacircle https://api.datacircle.dev/mcp \
--header "Authorization: Bearer $DATACIRCLE_API_KEY"
get_linkedin_profile (url, and provider: up2data, the default, harvestapi or fetchin) and get_balance (free). It also has list_files, get_download_link and add_funds.https://api.datacircle.dev. OpenAPI spec: https://docs.datacircle.dev/openapi.json. Docs: https://docs.datacircle.dev.DATACIRCLE_API_KEY environment variable and send it as Authorization: Bearer $DATACIRCLE_API_KEY. Never put the key in a URL and never print it.X-Data-Provider header names the provider (up2data, harvestapi or fetchin). The request and the answer are the provider's own, plus a datacircle_meta object.Every lookup is paid from the user's balance. Before any lookup, even a single one, say which provider you will use and what it costs ($0.002375 a profile through Up2Data, $0.0037 through HarvestAPI, $0.001485 through Fetchin; for a list, the total), and wait for the user's yes. Ask again before switching provider or adding URLs the user didn't give.
Pick Up2Data first: a profile it can't find is free. Send the full profile URL; Up2Data refuses a bare public identifier with a 400.
curl -s -X POST "https://api.datacircle.dev/v1/profiles/enrich" \
-H "Authorization: Bearer $DATACIRCLE_API_KEY" \
-H "X-Data-Provider: up2data" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.linkedin.com/in/williamhgates"}' \
| jq '{name: .data.full_name, headline: .data.headline, company: .data.current_company.name, positions: [.data.positions[]? | {title, company, started_at, ended_at}], cost: .datacircle_meta}'
The body also takes fields (only those top-level fields of data, same price), with_followers_and_connections and with_full_skills_and_endorsements (same price, slower).
Use HarvestAPI or Fetchin when Up2Data answers 429, HarvestAPI when the user needs the member's interests, which only it returns. Say which provider you used.
curl -s -G "https://api.datacircle.dev/linkedin/profile" \
--data-urlencode "url=https://www.linkedin.com/in/williamhgates" \
-H "Authorization: Bearer $DATACIRCLE_API_KEY" \
-H "X-Data-Provider: harvestapi" \
| jq '{name: "\(.element.firstName) \(.element.lastName)", headline: .element.headline, experience: [.element.experience[]? | {position, companyName}], cost: .datacircle_meta}'
HarvestAPI answers 200 even when it can't find the profile: then element is null and status is 404, and the lookup is billed ($0.0023).
Fetchin is the cheapest per profile found, with no daily limit; a profile it can't find is billed the same.
curl -s -G "https://api.datacircle.dev/api/v1/profile" \
--data-urlencode "profileUrlOrUrn=https://www.linkedin.com/in/williamhgates" \
-H "Authorization: Bearer $DATACIRCLE_API_KEY" \
-H "X-Data-Provider: fetchin"
It takes profileUrlOrUrn only, as a full profile URL: any other query parameter, a bare public identifier or a URN is a 400. The answer is Fetchin's own profile object (firstName, title, experiences, educations, ...). A profile it can't find is its 404 (code: PROFILE_NOT_FOUND), and the lookup is billed ($0.001485).
Every JSON answer carries datacircle_meta, for example {"provider": "up2data", "cost_usd": 0.002375, "balance_usd": 4.997625}. After more than one lookup, tell the user the total cost and the balance left. Reading the balance is free:
curl -s "https://api.datacircle.dev/balance/" \
-H "Authorization: Bearer $DATACIRCLE_API_KEY" | jq '.balance_usd'
Summarise what the user needs from each profile (role, company, history, skills) rather than pasting the raw JSON.
| Status | Meaning | What to do |
|---|---|---|
400 | A bad X-Data-Provider, a URL that isn't a LinkedIn profile URL, or a parameter the provider doesn't take. Not charged | Fix the request |
401 | Missing or invalid API key | Check DATACIRCLE_API_KEY |
402 | The balance can't cover the call | Tell the user; funds are added from $5 on their dashboard |
404 | No X-Data-Provider header, or a path Datacircle doesn't call for that provider | Use the path that matches the provider |
422 | Up2Data can't reach that profile (private or deleted). Not charged | Tell the user |
429 | Up2Data's daily limit, or Up2Data's or Fetchin's own rate limit. Not charged | Ask before switching provider; Fetchin's passes in a second |
502, 503 | The provider failed or didn't answer in time. Not charged | Send the same request again in a few seconds |
DATACIRCLE_API_KEY and goes only in the Authorization header.add_funds (MCP) only returns a Stripe Checkout link for the user to open and pay; nothing is charged until they do. Call it only when the user asks, and never say funds were added until get_balance shows them.429 until 00:00 UTC); HarvestAPI and Fetchin have none, and bill a profile they can't find.422 from Up2Data, a null element from HarvestAPI).