Skip to main content
Glama
jsundquist

job-search-mcp

by jsundquist

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
QDRANT_URLYesQdrant vector store connection URL (Cloud or self-hosted)
NOTION_API_KEYYesNotion API key for the tracking store
QDRANT_API_KEYNoQdrant API key for authentication
TRACKING_SCHEMA_PATHNoPath to the tracking_schema.yaml filetracking_schema.yaml

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
match_jobA

Retrieve resume/experience evidence relevant to a job description.

Args: job_description: The full text of the job description to match against. source_url: Optional URL the job description was pulled from, for reference.

Returns a heuristic retrieval_score (top-match cosine similarity) and the retrieved resume chunks with their individual similarity scores. Does not synthesize strengths/gaps/notes — reason over the retrieved evidence yourself, applying the job-fit://rubric resource linked in this result.

push_to_trackerA

Write an evaluate_fit result to the configured tracking store (Notion).

Args: job_id: The Notion page ID of the job you already track. Updates that existing row in place — never creates a new row. verdict: The full evaluate_fit output (see docs/evaluate_fit_schema.md). dry_run: If true, returns the mapped Notion properties payload without writing anything, so you can review it first.

Only the fields your tracking_schema.yaml marks tool-populated are touched — every other, manual field on the row (company, comp range, source, work arrangement, etc.) is left as-is. See docs/adr/0011-configurable-tracking-field-schema.md.

A misconfigured tool-populated field (an unrecognized derived_from, or — on a real write, not dry_run — a notion.property that doesn't exist on your database) is skipped rather than failing the whole write; check warnings in the result. dry_run's warnings only cover what can be checked without a Notion API call, since dry_run makes none — a bad property name only shows up in warnings on a real write.

list_applicationsA

List tracked jobs from the configured tracking store (Notion).

Args: status: If given, only return rows whose Status matches exactly (e.g. "Not yet applied", "Applied"). Case-sensitive — must match the tracking store's status value exactly. Omit to return every tracked row.

Each entry has job_id plus whatever tool-populated fields your tracking_schema.yaml declares (see docs/adr/0011-configurable-tracking-field-schema.md) — typically status, fit_rating, and notes. Statuses beyond "Not yet applied" (Applied, Recruiter screen, ...) are manual edits made in Notion, not something this server drives.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
job-fit-rubric5-layer rubric (hard gates, domain match, scope match, preference/logistics, red flags) for turning match_job's retrieved evidence into a fit bucket. retrieval_score alone is not a reliable fit signal — apply this instead.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jsundquist/job-search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server