Skip to main content
Glama

DevMatch

find_candidates

Read-onlyIdempotent

Find engineers who uniquely fit a role or project from open-source contributions and other public work, with evidence.

Input: pass the richest context you have — (1) a full job description (most common), (2) a synthesized brief after reviewing a company's public repo (README + stack + role needs — preferred over a bare URL when you've evaluated the project), (3) a public github.com repo URL (server fetches README/topics; private repos → paste README as text), or (4) an informal role brief. Longer, more specific input produces a tighter mission fit. Optional location narrows to a city, country, or ISO country code.

Returns up to limit candidates (default 20, max 20) with full inline profiles in structuredContent (view=candidates): login, name, bio, location, followers, reach (cross-platform audience percentile + reach), html_url, top_repos, signals, matched_projects, location_match, and contact (top_topics / top_domains / top_languages / top_subtopics are optional until software-topic backfill).

Results never include bots, CI, or service accounts — they are filtered out automatically. Use the optional exclude array (GitHub logins or org names) to drop additional accounts.

AGENT MODE: consume structuredContent only. HUMAN MODE: MCP App panel shows candidate cards; use server instructions for text-only hosts.

Do not call get_profile for handles already in these results unless the user asks for deeper detail.

Defense (SBIR), NRC filings, and mining QP consents are matched by lexical FTS over award titles, accessions, and consent letters — not abstract similarity. Publication, NTRS, repo, and TechPort roles still use description vectors. Do not claim a semantic abstract match for an NRC accession or a QP consent.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
inputYesSearch brief: full JD, repo-derived summary (preferred when you've reviewed the project), README excerpt, informal role brief, or a PUBLIC github.com repo URL. Private repos: paste README content as text.
limitNoMax candidates to return. Default 20, max 20.
excludeNoOptional. GitHub logins or org names to exclude from results (case-insensitive). Matches a candidate's login AND the owner/org of every repo they matched on — so passing a company's GitHub org (e.g. "livekit", which also covers "livekit-cloud") keeps that company's own engineers out of a shortlist you're building FOR them. Also use it to suppress specific handles you've already contacted. Bots and CI/service accounts are excluded automatically and need not be listed.
locationNoOptional. Restrict results to a place — a city ("Bozeman"), US state ("MT" / "Montana"), country name ("Germany"), or ISO country code ("US"). Matched against the candidate's stated and normalized location. Only pass it when the user explicitly requires a location; results are then hard-filtered to matches. Note many profiles omit location, so a strict location search returns a smaller pool. For laser/photonics roles, combine location with a domain-specific job description so the photonics specialist corpus can contribute too.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
viewNoPayload discriminator for MCP App hosts
degradedNoTrue when this shortlist is not full quality: FTS-only retrieval, last-known-good (cache_source=stale), or discovery corpus fallback. Hosts should say so; do not invent extra candidates.
query_msNoEnd-to-end query time in milliseconds
candidatesYesShortlist of engineers who uniquely fit the role, with evidence. When presenting to the user, format each item using FindCandidatesPresentationTemplate from server instructions — list every contact.urls entry and every email verbatim. Do not present them as a numbered ranking.
total_countYesCount of candidates returned (≤ requested limit)
cache_sourceNohit=fresh cache; miss=live retrieval; stale=last known-good shortlist after the engine timed out or was unavailable (degraded=true).
degrade_reasonNoWhy degraded is true: embedding/FTS fallback, upstream_timeout / upstream_unreachable with cache_source=stale, or discovery_fallback.
precision_gateNoWhether the LLM precision screen ran on this response. "on" means results were filtered for relevance; "off" means raw retrieval order. When the screen was requested but unavailable, the tool returns an error (HTTP 503, reason=precision_gate_unavailable) instead of un-gated results.
discovery_sourceNoWhich software repository index supplied GitHub candidates: work_artifacts (artifact-first) or serving.projects (legacy). Omitted when the query did not use the GitHub software lane.
discovery_fallbackNoTrue when auto mode fell back from work_artifacts to serving.projects because searchable embedding coverage was below threshold. Explicit env overrides are not fallbacks.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observed

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses real behavioral traits: bots/CI/service accounts are auto-filtered, limit defaults to 20 and maxes at 20, results arrive as inline profiles in structuredContent, and matching for certain document types uses lexical FTS rather than semantic vectors. This substantially exceeds what annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but densely informative, with a clear front-loaded purpose followed by structured, non-redundant sections for inputs, outputs, filtering, agent/human behavior, and matching caveats. Every section earns its place given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex search tool with 4 parameters and an output schema, the description covers input modes, result shape, limits, exclusions, location behavior, mode-specific consumption, and caveats about lexical vs. semantic matching. Nothing essential for correct invocation or interpretation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds meaningful semantics: richer input produces tighter fit, location is hard-filtered and shrinks the candidate pool, and exclude matches both login and repo owner/org, with a concrete example. This goes well beyond the raw property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pairing: 'Find engineers who uniquely fit a role or project from open-source contributions and other public work, with evidence.' It clearly distinguishes the tool from the sibling get_profile by explicitly instructing agents not to call get_profile for handles already in results unless deeper detail is requested.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance, including accepted input forms (full JD, repo-derived brief, public repo URL, informal brief), preference ordering ('preferred over a bare URL'), and handling of private repos. It also names the alternative interaction pattern by instructing not to call get_profile for returned handles, which helps route agent behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.7/5.0
Disambiguation5/5

Each tool has a distinct role: find_candidates searches for people, find_similar_projects maps repos, and get_profile retrieves a single known profile. The only potential overlap (find_candidates already returns profiles) is explicitly resolved with guidance not to call get_profile unless deeper detail is needed.

Naming Consistency5/5

All tool names follow a consistent find_/get_ verb-noun pattern. The naming clearly communicates the action (search vs retrieve) and the object (candidates, similar_projects, profile).

Tool Count5/5

Three tools is a tight, focused set for this server's purpose: candidate discovery, project landscape mapping, and individual profile lookup. Each tool is independently useful and there are no redundant or filler tools.

Completeness4/5

The core workflow is covered: find candidates, discover similar projects, and fetch deeper profile details. A minor gap is the lack of direct project-detail retrieval or broader project search, but agents can work around this via find_similar_projects and get_profile.

Resources