Skip to main content
Glama

Similar projects

similar_projects
Read-onlyIdempotent

Find projects related by SEMANTIC similarity, using each project's objective (learning-goal) embeddings — falling back to its theme embeddings when objectives are not embedded yet. Pass a seedProjectId to rank the projects most similar to it (with 0–1 scores). Pass null for seedProjectId to cluster ALL of the org's projects into thematic groups. Each project notes its basis ("objectives" or "themes"). Use this for "which projects are like X?" or "group my projects"; use cross_project_comparison instead to compare a known set side-by-side by theme.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "similar_projects"
  }
}

Input Schema

NameRequiredDescriptionDefault
maxProjectsNoSeed mode only: how many similar projects to return (default 5, max 10).
seedProjectIdNoA project id to rank others against. Pass null to cluster ALL the org's projects instead.
similarityThresholdNoCluster mode only: cosine cutoff to group projects (0.3–0.95, default 0.6). Higher = tighter, more clusters.

Output Schema

NameRequiredDescriptionDefault
modeNo
noteNo
seedNo
basisNo
errorNo
similarNo
clustersNo
thresholdNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed22 schema fields changed
    • removedInput schema / properties / maxProjects / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / maxProjects / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedInput schema / properties / seedProjectId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / seedProjectId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / similarityThreshold / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / similarityThreshold / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / basis / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / basis / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / clusters / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "projects": {
      -          "anyOf": [
      -            {
      -              "items": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "basis": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "id": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  },
      -                  "title": {
      -                    "anyOf": [
      -                      {
      -                        "type": "string"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "size": {
      -          "anyOf": [
      -            {
      -              "type": "number"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "projects": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "basis": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "id": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "title": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "size": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / error / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / error / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / mode / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / mode / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / note / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / note / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / seed / properties / id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / seed / properties / id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / seed / properties / title / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / seed / properties / title / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / similar / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "basis": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "id": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "score": {
      -          "anyOf": [
      -            {
      -              "type": "number"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "title": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "basis": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "id": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "score": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "title": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / threshold / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / threshold / type
      Added value: +[
      +  "number",
      +  "null"
      +]
  2. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real behavior beyond that: the embeddings fallback path, the dual operating modes, that scores are 0–1, and that each result carries a `basis` field. It stops short of noting limits on the all-projects clustering mode (cost/result size), which keeps it from a 5.

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?

Four dense, front-loaded sentences that each carry distinct information: mechanism, seed mode, cluster mode, output field, then routing. Minor redundancy with the schema in restating the null-to-cluster behavior, but nothing wasteful enough to cut.

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?

Output schema exists, so return values need not be spelled out, yet the description still flags the `basis` field and score range that matter for interpreting results. Both invocation modes and the alternative are covered, leaving nothing an agent needs missing.

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 description coverage is 100% and the schema itself already labels maxProjects and similarityThreshold as 'Seed mode only' / 'Cluster mode only'. The description reinforces the mode gating for seedProjectId (null = cluster all) but adds little syntax or constraint detail beyond what the schema states, so the baseline 3 applies.

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?

States a specific verb ('Find projects'), the exact relation ('SEMANTIC similarity'), and the mechanism (objective/learning-goal embeddings with theme-embedding fallback). It also names a concrete sibling it is not ('cross_project_comparison instead to compare a known set side-by-side by theme'), so an agent can disambiguate without opening either schema.

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?

Gives explicit routing: seedProjectId for 'which projects are like X?', null seed for 'group my projects', and names cross_project_comparison as the alternative for comparing a known set by theme. Both when-to-use branches and the exclusion are covered.

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