Skip to main content
Glama

Foundaree

Match people to a requirement

match_people
Read-onlyIdempotent

Rank public Foundaree profiles against a list of required skills — use when the user describes a need ("a co-founder who knows React and has sold to enterprises", "a dentist in Pune", "someone to rewire my kitchen in Kochi") rather than searching for a known person. Give the required skills as skills (or describe the need in q; skill terms are then derived from it and q also narrows candidates by full text). location, area, workType, category, availability and lookingFor are hard filters; the skills only score: score = matched ÷ required (0–1), where a listed skill counts 1 and a term found in the person's category or lookingFor counts ½. Someone with 3 of 5 skills still appears, below someone with 5; ties break on availability (available first), then founding members (Foundaree's first 150 members), then recency. When nobody matches a single skill, the filtered candidates come back with score 0 and fallback: true instead of an empty list. Returns JSON with items (each: person, score, matchedSkills, missingSkills, profileUrl), total, requiredSkills and fallback. Each answer has two views: the text content is the JSON described above, and the structured content is a profile-card list (people, total, query). In apps that support MCP Apps (ChatGPT, Claude) the cards render as Foundaree profile cards. A person with foundareeRole ("founder" or "team") is part of Foundaree's own team; only Foundaree sets it.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qNoFree-text description of the need, e.g. "someone with React and PostgreSQL experience". Used to derive skills when `skills` is absent, and as a full-text filter.
areaNoOptional neighbourhood filter within the city (case-insensitive substring), e.g. "Kakkanad"
limitNoMaximum number of ranked results. Defaults to 20.
skillsNoThe required skills, e.g. ["React", "PostgreSQL", "Kubernetes"]. Required unless q is given.
categoryNoOptional comma-separated trade/profession filter (OR semantics), e.g. "driver" or "carpenter,electrician"
locationNoOptional location filter (case-insensitive substring), e.g. "Bengaluru" or "Kochi"
workTypeNoOptional audience filter: local_service = blue-collar jobs, hands-on work (electricians, carpenters, drivers, cleaners, carers...); professional = white-collar jobs, office and professional work (developers, designers, accountants...)
lookingForNoOptional comma-separated looking-for filter (AND semantics), e.g. "cofounder" or "job,freelance"
availabilityNoOptional availability filter (exact match)

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYes
totalYes
peopleYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedOutput schema / properties / people / items / properties / backed
      Added value: +{
      +  "items": {
      +    "maxLength": 160,
      +    "type": "string"
      +  },
      +  "maxItems": 12,
      +  "type": "array"
      +}
    • addedOutput schema / properties / people / items / properties / workProof / properties / github / properties / languageRepos
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "name": {
      +        "type": "string"
      +      },
      +      "repos": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "repos"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / people / items / properties / workProof / properties / github / properties / topics
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "name": {
      +        "type": "string"
      +      },
      +      "repos": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "repos"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • addedOutput schema / properties / people / items / properties / updatedAt
      Added value: +{
      +  "type": "string"
      +}
  3. Changed2 schema fields changed
    • addedOutput schema / properties / people / items / properties / languages
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 5,
      +  "type": "array"
      +}
    • addedOutput schema / properties / people / items / properties / serviceAreas
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 5,
      +  "type": "array"
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / people / items / properties / priceLine
      Added value: +{
      +  "maxLength": 200,
      +  "type": "string"
      +}
  5. Changed1 schema field changed
    • changedOutput schema / properties / people / items / properties / verifiedBy / items / enum
      Previous value: -[
      -  "phone",
      -  "github",
      -  "google"
      -]New value: +[
      +  "phone",
      +  "github",
      +  "google",
      +  "licence"
      +]
  6. Changed1 schema field changed
    • addedOutput schema / properties / people / items / properties / foundareeRole
      Added value: +{
      +  "enum": [
      +    "founder",
      +    "team"
      +  ],
      +  "type": "string"
      +}
  7. Changed1 schema field changed
    • addedOutput schema / properties / people / items / properties / workProof
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "github": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "fetchedAt": {
      +          "type": "string"
      +        },
      +        "followers": {
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "languages": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "lastPushAt": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "login": {
      +          "type": "string"
      +        },
      +        "publicRepos": {
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "stars": {
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "url": {
      +          "format": "uri",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "login",
      +        "url",
      +        "publicRepos",
      +        "followers",
      +        "stars",
      +        "languages",
      +        "lastPushAt",
      +        "fetchedAt"
      +      ],
      +      "type": "object"
      +    },
      +    "proven": {
      +      "maximum": 9007199254740991,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "total": {
      +      "maximum": 9007199254740991,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "website": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "host": {
      +          "type": "string"
      +        },
      +        "url": {
      +          "type": "string"
      +        },
      +        "verifiedAt": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "url",
      +        "host",
      +        "verifiedAt"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "proven",
      +    "total"
      +  ],
      +  "type": "object"
      +}
  8. Changed1 schema field changed
    • addedOutput schema / properties / people / items / properties / email
      Added value: +{
      +  "type": "string"
      +}
  9. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), yet the description adds substantial behavior beyond them: the scoring formula (matched/required, with 1 vs ½ weighting), tie-break order, the score-0 fallback flag, the dual text/structured response views, and the meaning of foundareeRole.

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?

Front-loaded with purpose and usage before mechanism, and every sentence carries information. It is dense and long, with some detail (e.g. Foundaree's first 150 members) that is more trivia than decision-relevant, but nothing is truly wasted.

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?

Despite 9 parameters and no required fields, the description covers filtering vs scoring, tie-breaking, fallback, and return shape/views, so an agent can call and interpret it correctly. The output schema is even restated helpfully rather than left unexplained.

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?

Schema coverage is 100%, but the description adds semantics the schema does not: which params act as hard filters (location, area, workType, category, availability, lookingFor) versus which only score (skills), and how q both derives skills and narrows by full text.

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+resource ('Rank public Foundaree profiles against a list of required skills') and immediately contrasts with 'searching for a known person', which cleanly separates it from siblings like search_people and get_person.

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 when-to-use triggers with concrete example queries and an explicit when-not ('rather than searching for a known person'), plus the skills-vs-q decision rule. Routing is unambiguous.

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