Serveur MCP

mcp

com.speedrun-talent-network/mcp

Ce que fait ce MCP

Searches live startup job listings, company profiles, hiring statistics, and curated employer collections, and records candidate interest or network membership with consent.

express_interest
Record interest in a role
Record a candidate's interest in one live role (with their consent) and get back the canonical apply info. This does NOT submit an application anywhere: apply.kind 'onsite' means the candidate applies on the returned job url; 'external' means the url hands off to the company's own careers page. A candidate not yet in the a16z speedrun talent network is also added as a partial profile; always relay the returned finish_url so they can add a resume (the response is identical whether or not they were already in the network — membership is never disclosed). Idempotent per candidate; safe to retry.
Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['job_id', 'email'], 'properties': {'email': {'type': 'string', 'maxLength': 200, 'minLength': 5, 'description': "Candidate's email address."}, 'job_id': {'type': 'string', 'minLength': 4, 'description': 'Job UUID, 8-hex id prefix, or canonical job slug (same ids as get_job/search_jobs).'}, 'full_name': {'type': 'string', 'maxLength': 200, 'description': "Candidate's full name."}, 'linkedin_url': {'type': 'string', 'maxLength': 300, 'description': 'LinkedIn profile URL. Optional but strongly recommended.'}, 'agent_client_id': {'type': 'string', 'maxLength': 64, 'description': 'Identifier for the calling agent/integration. Attribution only.'}}}
get_collection
Get a collection with ranked members
Fetch one published collection by slug with its ranked member companies: name, tier, cohort, open-role count, location, stage, investors, and which functions/cities they're hiring in. Members are paginated (100 per page). Follow up with get_company or search_jobs (company filter) for a specific member's roles.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'page': {'type': 'integer', 'maximum': 200, 'minimum': 0, 'description': '0-based member page, 100 per page.'}, 'slug': {'type': 'string', 'minLength': 1, 'description': 'Collection slug from list_collections, e.g. "ai-infra" or "new-york".'}}}
get_company
Get a hiring company
Fetch one company profile by slug (from job.company_slug or a https://speedrun-talent-network.com/companies/... URL): name, portfolio tier, cohort, location, industries, one-line blurb, every live open role with canonical urls, and, while company facets are enabled, company.labels (stage, size band, business model, industry as LinkedIn's industry name, frontier-lab / big-tech / AI-native / hardware flags as display strings; null when the company has no classification yet). Use search_jobs or list_collections to discover companies; use this for the full picture of one employer.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Company slug, e.g. "anthropic" in /companies/anthropic.'}}}
get_hiring_stats
Live hiring aggregates
Aggregate hiring data across the whole board, recomputed live: open-role and hiring-company counts, demand mix by function, posted pay-band midpoints by function (p25/median/p75, annual USD), remote share, top hiring locations, and the speedrun vs a16z portfolio split. Use this to answer "what do a16z portfolio startups pay" or "how many startup jobs are open" — the human-readable version lives at https://speedrun-talent-network.com/network.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
get_job
Get one job
Fetch one role by id: a job UUID, the first 8 hex characters of one, or the canonical slug from a https://speedrun-talent-network.com/jobs/... URL. Returns the full posting: plain-text description, posted pay band, how to apply (apply.kind 'onsite' = the candidate applies right on the job url; 'external' = the url hands off to the company's own careers page), the canonical url to send users to, and, while classified labels are enabled, job.labels (function, specialty, seniority, minimum experience band, workplace, engagement, founding-role and AI-native flags as display strings; null when the role has no classification). Closed roles come back with status:'closed' rather than an error.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'minLength': 4, 'description': 'Job UUID, 8-hex id prefix, or canonical job slug.'}}}
get_network_info
About the talent network
What the a16z speedrun talent network is, why a candidate would join, how joining works, and what happens after. Use this before pitching the network to a candidate so the description is accurate; joining itself is the join_network tool.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
join_network
Join the talent network
Add a candidate to the a16z speedrun talent network, with their consent. Requires full_name, email, and linkedin_url; every other field strengthens the profile. Idempotent and always safe to retry: an existing profile is never modified, and the response is identical whether or not the email was already in the network (membership is never disclosed). On success, relay the returned message and finish_url to the candidate so they can add a resume. Never call this without the candidate's explicit go-ahead.
Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['full_name', 'email', 'linkedin_url'], 'properties': {'craft': {'type': 'string', 'maxLength': 100, 'description': 'Primary craft, e.g. engineering, design, product, research, sales, marketing, operations.'}, 'email': {'type': 'string', 'maxLength': 200, 'minLength': 5, 'description': "Candidate's email address."}, 'region': {'type': 'string', 'maxLength': 200, 'description': 'Where they are based, e.g. "SF Bay Area" or "NYC".'}, 'polarity': {'type': 'string', 'maxLength': 2000, 'description': 'A strongly held opinion about how they like to work.'}, 'full_name': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': "Candidate's full name."}, 'is_student': {'type': 'boolean', 'description': 'True if they are currently a student.'}, 'work_links': {'type': 'string', 'maxLength': 2000, 'description': 'Links to work samples, comma-separated.'}, 'is_founding': {'type': 'boolean', 'description': 'True if they want founding-team roles.'}, 'linkedin_url': {'type': 'string', 'maxLength': 300, 'minLength': 5, 'description': 'LinkedIn profile URL, e.g. https://linkedin.com/in/handle.'}, 'accomplishments': {'type': 'string', 'maxLength': 2000, 'description': 'The thing they are proudest of having built or shipped.'}, 'agent_client_id': {'type': 'string', 'maxLength': 64, 'description': 'Identifier for the calling agent/integration, e.g. "claude-code" or "career-ops". Used for attribution only.'}, 'current_company': {'type': 'string', 'maxLength': 200, 'description': 'Current employer.'}, 'graduation_date': {'type': 'string', 'maxLength': 50, 'description': 'Expected graduation, if a student.'}, 'portfolio_links': {'type': 'string', 'maxLength': 2000, 'description': 'Portfolio / GitHub / personal site URLs, comma-separated.'}, 'work_arrangements': {'type': 'string', 'maxLength': 300, 'description': 'Work arrangements they are open to, comma-separated, e.g. "In person, Hybrid, Remote".'}, 'currently_building': {'type': 'string', 'maxLength': 2000, 'description': 'What they are building or working on now.'}}}
list_collections
List curated collections
List the published curated collections of hiring companies, grouped as: pinned (portfolio tiers), industries (the 12-sector vocabulary, e.g. ai-infra, defense, fintech), hubs (cities + remote), investors, and signals (new-this-week, founding-roles, remote-first, hiring-in-volume). Each carries live company/role counts and a canonical url. Start here when a user asks "who's hiring in X" — then drill in with get_collection.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
list_companies
List hiring companies
List every portfolio company with at least one live open role, most open roles first (paginated, 100 per page). Prefer list_collections for browsing by industry/hub/signal; use this for a raw roster.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'integer', 'maximum': 200, 'minimum': 0, 'description': '0-based page, 100 companies per page.'}}}
search_jobs
Search open roles
Search live open roles across the a16z speedrun talent network jobs board (speedrun portfolio + the wider a16z portfolio; data syncs continuously from each company's own job board). Full-text search plus facet filters, with live facet counts in every response — read the facets to discover valid filter values. Results are paginated (50 per page, 0-based page). Every job carries a canonical url on https://speedrun-talent-network.com; link users there to view or apply. By default results cover the portfolio only; pass scope='speedrun' to narrow to speedrun portfolio companies only, or scope='everywhere' to also include the wider startup universe when that scope is live (the response then reports beyond_portfolio, the count of extra matches past the scope boundary: universe roles in portfolio scope, roles beyond speedrun within the a16z portfolio in speedrun scope; in everywhere scope it counts the universe-tier roles already included in the results — never add it to total). Mirrors GET https://speedrun-talent-network.com/api/v1/jobs exactly.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'q': {'type': 'string', 'maxLength': 120, 'description': 'Free-text query over title, company, and location. Synonyms expand (ml, ai, swe, pm, gtm, nyc, sf, la).'}, 'ai': {'type': 'boolean', 'description': 'true = only roles classified as AI-native (the day job is building with or on models). facets.aiRole counts them under the other filters; unlabelled roles never match (facets.aiUnspecified). Ignored while classified crafts are disabled.'}, 'fn': {'type': 'string', 'description': 'Function filter, comma-separated. Values: engineering, research, product, design, sales, marketing, operations, other; while classified crafts are enabled also data, growth, customer, finance, legal, people, business_development, strategy, executive, hardware_manufacturing (read facets.fn for the live set).'}, 'wp': {'type': 'string', 'description': 'Workplace filter, comma-separated (OR within the group): remote, hybrid, onsite. Live counts in facets.workplace.'}, 'emp': {'type': 'string', 'description': 'Employment type, comma-separated. Values: FullTime, PartTime, Intern, Contract, Temporary.'}, 'eng': {'type': 'string', 'description': 'Classified engagement type, comma-separated: full_time, part_time, contract, internship, cofounder, advisor, plus _ for roles with no engagement label (facets.engUnspecified counts them). Live counts in facets.eng. Prefer this over emp (the raw ATS field, ~half empty) for part-time / contract / internship asks. Ignored while classified crafts are disabled.'}, 'lab': {'type': 'boolean', 'description': 'true = only roles at frontier AI labs (facets.frontierLab counts them). Ignored while company facets are disabled.'}, 'loc': {'type': 'string', 'description': 'Location filter: comma-separated city names (see facets.loc in any response for the live vocabulary), plus the special value "remote".'}, 'lvl': {'type': 'string', 'description': 'Classified level filter, comma-separated, ladder order: intern, new_grad, junior, mid, senior, staff_principal, lead_manager, director, vp, c_level, founder, plus _ for roles with no level label (facets.lvlUnspecified counts them). Live counts in facets.lvl. Ignored while classified crafts are disabled.'}, 'sen': {'type': 'string', 'description': 'Seniority filter, comma-separated. Values: founding, exec, staff, senior, junior, intern, plus _ for roles with no stated level (facets.senUnspecified counts them). Remapped onto lvl while the classified level ladder is enabled.'}, 'yoe': {'type': 'string', 'description': 'Classified minimum-experience band, comma-separated, band order: 0 (none required), under_1, 1_2, 3_5, 6_9, 10_14, 15_plus, plus _ for roles with no experience label (facets.yoeUnspecified counts them). Live counts in facets.yoe. Ignored while classified crafts are disabled.'}, 'comp': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Minimum annual compensation in USD: matches roles whose posted pay band reaches this number. Only roles with posted comp match unless comp_any is true.'}, 'page': {'type': 'integer', 'maximum': 200, 'minimum': 0, 'description': '0-based page number, 50 jobs per page.'}, 'size': {'type': 'string', 'description': 'Company size filter, comma-separated employee bands: 1_10, 11_50, 51_200, 201_500, 501_1000, 1001_5000, 5000_plus. Live counts in facets.size; facets.sizeUnspecified counts roles at companies with no size label. Ignored while company facets are disabled.'}, 'sort': {'enum': ['rel', 'new', 'comp'], 'type': 'string', 'description': 'rel = relevance (default when q is set), new = newest first (default otherwise), comp = highest posted comp first.'}, 'spec': {'type': 'string', 'description': 'Specialty filter, comma-separated slugs; meaningful with exactly ONE fn value (specialties are scoped to a craft). Read facets.spec in a one-craft response for the live vocabulary. Ignored while classified crafts are disabled.'}, 'metro': {'type': 'string', 'description': "Metro filter, comma-separated keys (max 5): sf, nyc, la, sv, dc, chi, sea, bos, aus, lon, oc, dal, atl, tor, sd. Expands to each metro's cities server-side; ORs with loc/remote. Live counts in facets.metro."}, 'scope': {'enum': ['speedrun', 'portfolio', 'everywhere'], 'type': 'string', 'description': "'speedrun' narrows the search to a16z speedrun portfolio companies only; 'everywhere' widens it past the a16z portfolio into the broader startup universe. Server-gated: while the scope machinery is dark this is inert."}, 'stage': {'type': 'string', 'description': 'Company stage filter, comma-separated; read facets.stage for the live vocabulary (e.g. seed, series_a, series_b, growth). While company facets are enabled the stage is the roster stage with a classified stage filling gaps, and facets.stageUnspecified counts roles at companies with no stage.'}, 'cohort': {'type': 'string', 'description': 'speedrun cohort tag(s), comma-separated, e.g. SR007.'}, 'posted': {'enum': ['24h', '7d', '30d'], 'type': 'string', 'description': 'Posted-date preset: published in the past day, week or month. Live counts in facets.posted.'}, 'remote': {'type': 'boolean', 'description': 'true = only roles open to remote candidates (alias of wp=remote).'}, 'bigtech': {'type': 'boolean', 'description': 'true = only roles at big tech companies (facets.bigTech counts them). Ignored while company facets are disabled.'}, 'company': {'type': 'string', 'description': 'Exact company key (as returned in job.company).'}, 'stealth': {'enum': ['only', 'hide'], 'type': 'string', 'description': "'only' = unannounced (stealth) roles only; 'hide' = exclude them."}, 'comp_any': {'type': 'boolean', 'description': 'true = alongside comp/comp_max, ALSO include roles without posted comp (hidden by default; facets.compHidden counts them).'}, 'comp_max': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Maximum annual compensation in USD: matches roles whose posted pay band starts at or below this number. Combine with comp for a range.'}, 'founding': {'type': 'boolean', 'description': 'true = only roles classified as founding roles (founding team, first hires). facets.founding counts them under the other filters; unlabelled roles never match (facets.foundingUnspecified). Ignored while classified crafts are disabled.'}, 'industry': {'type': 'string', 'description': 'Company industry filter, comma-separated slugs of LinkedIn industry names (e.g. computer_software, financial_services, hospital_health_care = Hospital & Health Care); read facets.industry in any response for the live top-24 vocabulary. Ignored while company facets are disabled.'}, 'portfolio': {'type': 'string', 'description': 'Portfolio tier, comma-separated: speedrun (the a16z speedrun accelerator portfolio) and/or a16z (the wider a16z portfolio).'}}}
Modifié
get_company
23 September 2026 02:54
Modifié
get_job
23 September 2026 02:54
Modifié
search_jobs
23 September 2026 02:54
Modifié
search_jobs
21 September 2026 03:01
Ajouté
list_companies
17 September 2026 12:37
Ajouté
express_interest
17 September 2026 12:37
Ajouté
join_network
17 September 2026 12:37
Ajouté
get_network_info
17 September 2026 12:37
Ajouté
get_hiring_stats
17 September 2026 12:37
Ajouté
get_collection
17 September 2026 12:37
Ajouté
list_collections
17 September 2026 12:37
Ajouté
get_company
17 September 2026 12:37
Ajouté
get_job
17 September 2026 12:37
Ajouté
search_jobs
17 September 2026 12:37