Skip to main content
Glama

Code Synapse — Fit Repo Finder

find_fit_candidates

Pre-adoption decision tool for open-source reuse. Call BEFORE implementing non-trivial functionality that a maintained OSS component could provide (queue, scheduler, parser, auth, cache, protocol client, ...) or before adding a dependency. Send a short capability need plus your project's minimal constraints; returns up to 12 candidates by default (up to 20 when max_candidates is provided), with per-constraint pass/fail/unknown, evidence basis (observed vs inferred), and explicit no-hit semantics.

Input Schema

NameRequiredDescriptionDefault
needYesCapability need, e.g. "job queue with retry for node.js". No project names, paths, or secrets.
strictNoalso exclude candidates whose required constraint fields are unknown
telemetryNoaggregate stores zero user text (outcome counters only); debug also stores the need for 30 daysaggregate
exclusionsNo
constraintsNoMinimal project constraints. Each verdict comes back as pass|fail|unknown per candidate.
max_candidatesNo
existing_componentsNoowner/repo you already use — excluded and counted as already_have

Output Schema

NameRequiredDescriptionDefault
corpusYes
outcomeYes
candidatesYes
relaxationNopresent on constrained_out: real recount when dropping one constraint
no_hit_guidanceNo
contract_versionYes
rejected_summaryYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / constraints / properties / runtime / properties / value / description
      Previous value: -"e.g. binary-cli, docker-server, browser, python-lib"New value: +"one of: docker-server, python-lib, node-lib, jvm-lib, native-mobile, embedded-firmware, browser, serverless, binary-cli, cloud-saas, desktop-gui, native-lib, game-engine-plugin. Any other value returns an error result listing these."
  2. Changed2 schema fields changed
    • changedInput schema / properties / constraints / properties / license / description
      Previous value: -"SPDX allow-list, e.g. [\"MIT\",\"Apache-2.0\",\"GPL-3.0\"]. Judged against the GitHub-observed spdx_id; matching ignores case and treats the GNU \"-only\"/\"-or-later\" suffixes as equivalent (GitHub cannot distinguish them). Verdict is \"unknown\" in three cases: GitHub could not identify the license (NOASSERTION), the repo has no LICENSE file at all (NONE — legally all-rights-reserved, so check the candidate's license field), or it is not collected yet"New value: +"SPDX allow-list, e.g. [\"MIT\",\"Apache-2.0\",\"GPL-3.0\"]. Judged against the GitHub-observed spdx_id; matching ignores case and treats the GNU \"-only\"/\"-or-later\" suffixes as equivalent (GitHub cannot distinguish them). Verdict is \"unknown\" in three cases: GitHub could not identify the license (NOASSERTION), GitHub found no license file at the repo root (NONE — see the candidate's license field; GitHub only detects root-level license files), or it is not collected yet"
    • changedOutput schema / properties / candidates / items / properties / license / description
      Previous value: -"GitHub-observed SPDX id (GitHub emits the deprecated GNU short ids, e.g. \"GPL-3.0\" not \"GPL-3.0-only\"). \"NOASSERTION\" = a LICENSE file exists but GitHub could not identify it; \"NONE\" = the repo has no LICENSE file at all (legally all-rights-reserved — judged \"unknown\", not \"fail\", so confirm before adopting); null = not collected yet. All three yield an \"unknown\" verdict"New value: +"GitHub-observed SPDX id (GitHub emits the deprecated GNU short ids, e.g. \"GPL-3.0\" not \"GPL-3.0-only\"). \"NOASSERTION\" = a LICENSE file exists but GitHub could not identify it; \"NONE\" = GitHub found no license file at the repo *root* — it does not look in subdirectories or the README, so this is not proof the project is unlicensed (judged \"unknown\", not \"fail\"; if genuinely absent, default copyright applies — confirm in the repo); null = not collected yet. All three yield an \"unknown\" verdict"
  3. Changed2 schema fields changed
    • changedInput schema / properties / constraints / properties / license / description
      Previous value: -"SPDX allow-list, e.g. [\"MIT\",\"Apache-2.0\",\"GPL-3.0\"]. Judged against the GitHub-observed spdx_id; matching ignores case and treats the GNU \"-only\"/\"-or-later\" suffixes as equivalent (GitHub cannot distinguish them). Verdict is \"unknown\" when GitHub could not identify the license (NOASSERTION) or it is not collected yet"New value: +"SPDX allow-list, e.g. [\"MIT\",\"Apache-2.0\",\"GPL-3.0\"]. Judged against the GitHub-observed spdx_id; matching ignores case and treats the GNU \"-only\"/\"-or-later\" suffixes as equivalent (GitHub cannot distinguish them). Verdict is \"unknown\" in three cases: GitHub could not identify the license (NOASSERTION), the repo has no LICENSE file at all (NONE — legally all-rights-reserved, so check the candidate's license field), or it is not collected yet"
    • changedOutput schema / properties / candidates / items / properties / license / description
      Previous value: -"GitHub-observed SPDX id (GitHub emits the deprecated GNU short ids, e.g. \"GPL-3.0\" not \"GPL-3.0-only\"); \"NOASSERTION\" = a LICENSE file exists but GitHub could not identify it; null = not collected"New value: +"GitHub-observed SPDX id (GitHub emits the deprecated GNU short ids, e.g. \"GPL-3.0\" not \"GPL-3.0-only\"). \"NOASSERTION\" = a LICENSE file exists but GitHub could not identify it; \"NONE\" = the repo has no LICENSE file at all (legally all-rights-reserved — judged \"unknown\", not \"fail\", so confirm before adopting); null = not collected yet. All three yield an \"unknown\" verdict"
  4. Changed2 schema fields changed
    • changedInput schema / properties / constraints / properties / license / description
      Previous value: -"v1 always evaluates to \"unknown\" (license not yet in corpus)"New value: +"SPDX allow-list, e.g. [\"MIT\",\"Apache-2.0\",\"GPL-3.0\"]. Judged against the GitHub-observed spdx_id; matching ignores case and treats the GNU \"-only\"/\"-or-later\" suffixes as equivalent (GitHub cannot distinguish them). Verdict is \"unknown\" when GitHub could not identify the license (NOASSERTION) or it is not collected yet"
    • addedOutput schema / properties / candidates / items / properties / license
      Added value: +{
      +  "description": "GitHub-observed SPDX id (GitHub emits the deprecated GNU short ids, e.g. \"GPL-3.0\" not \"GPL-3.0-only\"); \"NOASSERTION\" = a LICENSE file exists but GitHub could not identify it; null = not collected",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / max_candidates / default
      Previous value: -8New value: +12
  6. Added

TDQS

A3.9/5.0
Behavior4/5

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

No annotations, so the description carries the burden and does well: it discloses result cardinality (12 default, 20 with max_candidates), per-constraint pass/fail/unknown verdicts, observed-vs-inferred evidence basis, and explicit no-hit semantics. It omits error behavior (e.g. invalid runtime returns an error) and any rate/permission constraints.

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

Conciseness4/5

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

Three sentences, front-loaded with the decision-gating instruction and then the return contract. The parenthetical capability list adds useful examples at modest length; dense but no filler.

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

Completeness4/5

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

Given an output schema exists, the description covers the parts an agent needs to act: when to invoke, what to pass in the need, and how results are shaped. Missing only the failure/error path for invalid constraint values and whether exclusions affect already_have counting.

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

Parameters3/5

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

Schema coverage is 71% and the schema already documents need, strict, telemetry, exclusions, and the nested constraint fields. The description confirms the need should be a short capability statement plus minimal constraints, which reinforces but does not extend the schema; the 12/20 default is already in the schema defaults.

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

Purpose4/5

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

Names a specific role ('pre-adoption decision tool for open-source reuse') and the concrete resource returned (candidates with per-constraint verdicts). It is distinguishable from a plain component search, but it never names the sibling search_components, so the boundary rests on inference.

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

Usage Guidelines4/5

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

Explicit timing guidance: call BEFORE implementing non-trivial functionality an OSS component could provide (queue, scheduler, parser, auth) or before adding a dependency. No exclusion cases and no reference to the sibling search_components, so it stops short of a 5.

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.

Resources