Skip to main content
Glama
eric623

Claude MCP Job Assistant

by eric623

Claude MCP Job Assistant

Overview

Claude MCP Job Assistant is a production-ready MCP (Model Context Protocol) server designed to demonstrate how Tools, Resources, and Prompts can be orchestrated to build an intelligent job search assistant.

The project uses Claude Desktop as the MCP Host/Client and exposes a complete ecosystem for:

  • Searching job opportunities.

  • Saving interesting positions.

  • Performing labor market analysis.

  • Receiving personalized recommendations based on a resume.

  • Generating matching reports between a resume and saved jobs.

This project provides a practical introduction to the Model Context Protocol and illustrates how modern AI assistants can leverage MCP capabilities to deliver contextual and personalized experiences.


Related MCP server: jobjourney-claude-plugin

Features

  • MCP-compliant server implementation.

  • Integration with Claude Desktop.

  • Intelligent job search.

  • Job bookmarking and persistence.

  • Resume-based recommendations.

  • Labor market analysis.

  • Matching reports generation.

  • Modular architecture using MCP Tools, Resources, and Prompts.

  • Production-ready setup with uv.


Architecture

The MCP server is organized around the three core MCP primitives:

Tools

Tool

Description

search_jobs()

Retrieves job offers using an external API.

save_job()

Saves selected jobs in a structured format.


Resources

Resource

Description

resume://default

Loads the user's resume.

jobs://saved

Loads previously saved jobs.


Prompts

Prompt

Description

analyze_job_market()

Analyzes labor market trends.

personalized_job_recommender()

Suggests jobs, skills, and companies based on the user's resume.

create_match_report()

Generates a report comparing saved jobs with the user's resume.


Workflow

User
 ↓
Claude Desktop (MCP Host)
 ↓
MCP Job Assistant Server
 ├── Tools
 │   ├── search_jobs()
 │   └── save_job()
 │
 ├── Resources
 │   ├── resume://default
 │   └── jobs://saved
 │
 └── Prompts
     ├── analyze_job_market()
     ├── personalized_job_recommender()
     └── create_match_report()

 ↓
Generated Response

Technologies Used

  • Python

  • Model Context Protocol (MCP)

  • Claude Desktop

  • UV

  • External Job APIs

  • PDF Processing


Installation

1. Clone the Repository

git clone https://github.com/eric623/Claude-MCP-Job-Assistant.git

cd Claude-MCP-Job-Assistant

2. Install Dependencies

This project uses uv for dependency management.

uv sync

At this stage, the MCP server is ready to be launched by Claude Desktop.


Claude Desktop Configuration

Step 1: Install Claude Desktop

Download and install Claude Desktop from Anthropic.


Step 2: Open Developer Settings

Navigate to:

Settings → Developer → Edit Config

This opens the claude_desktop_config.json file.


Step 3: Add the MCP Server

Add the following configuration:

{
  "mcpServers": {
    "mcp_job": {
      "command": "uv",
      "args": [
        "--directory",
        "PATH_TO_PROJECT_DIRECTORY",
        "run",
        "server.py"
      ]
    }
  }
}

Replace PATH_TO_PROJECT_DIRECTORY with the absolute path to your local project folder.


Adding Your Resume

Place your CV inside the resume directory.

The file must be named exactly:

resume.pdf

Example:

Claude-MCP-Job-Assistant/
│
└── resume/
    └── resume.pdf

Important: Resume-based recommendations and matching reports require this file.


Launching the MCP Server

After saving the configuration:

  1. Completely close Claude Desktop.

  2. Reopen Claude Desktop.

You should now see:

mcp_job (Running)

in the Developer panel.


MCP Concepts Demonstrated

  • MCP Tools

  • MCP Resources

  • MCP Prompts

  • Claude Desktop Integration

  • Context-Aware AI Systems

  • Intelligent Job Search

  • External API Consumption

  • Personalized Recommendations

  • Modular MCP Server Design


Why This Project?

This project was built to explore and demonstrate the capabilities of the Model Context Protocol (MCP) by implementing a realistic use case centered around job exploration and career assistance.

It highlights how MCP enables:

  • Context-aware assistants.

  • Modular architectures.

  • Tool orchestration.

  • Resource management.

  • Prompt engineering.

  • Intelligent interactions between users and AI systems.


Author

AKAKPO Koffi Moïse

  • Interested in Agentic AI, Multi-Agent Systems, and Applied Artificial Intelligence.


Claude MCP Job Assistant demonstrates how the Model Context Protocol can be leveraged to build intelligent, modular, and extensible assistants through the coordinated use of Tools, Resources, and Prompts.

Available Tools

2 tools
save_jobA

Save a specific job from temporary list into candidate's saved folder.

If salary not provided, extract it from the fetched job data.

Args: job_id: The ID of the job to save. salary (optional): The salary of the job to save.

Returns: A string indicating the job was saved successfully.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes
salaryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the salary extraction side-effect ('If salary not provided, extract it from the fetched job data') which is helpful behavioral context, and the return type. However, it doesn't disclose side effects like whether the job is removed from the temp list, idempotency, or error behaviors.

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?

The description is compact with clear sections (Args, Returns). It adds a second sentence about salary extraction that is valuable. Minor redundancy: the Returns line restates the obvious outcome of a save action. Overall well-organized and front-loaded.

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?

There is an output schema that presumably documents the return value, reducing burden there. The tool has only 2 params, making it relatively simple. The description covers the core behavior and the notable optional salary-extraction side effect. It doesn't address failure cases or edge conditions, but for a simple save operation with an output schema, this is reasonably complete.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It does reasonably: job_id is explained as 'The ID of the job to save' and salary as 'The salary of the job to save', plus the extraction fallback behavior. A stronger definition of what 'extract' means exactly and expected salary format would push this higher, but the semantics are adequately clarified given zero schema documentation.

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?

The description clearly states the verb (save), the resource (job), and the action context (from temporary list into candidate's saved folder). It distinguishes the purpose reasonably from its sibling search_jobs, though it doesn't explicitly name the sibling as an alternative. The 'Args' and 'Returns' sections add useful structure.

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

Usage Guidelines3/5

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

The description implies usage context (saving from a temporary list into a saved folder) but does not explicitly state when to use this vs search_jobs. It mentions an optional behavior (extract salary if not provided) but gives no exclusions, prerequisites, or explicit alternative guidance.

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

search_jobsC

Fetch jobs using JSearch API and store them temporarily. Return key info.

Args: role: The role to search for. location: The location to search for. max_results: The maximum number of jobs to return.

Returns: A list of dictionaries containing the job information.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
locationYes
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It reveals that jobs are 'stored temporarily,' which adds transparency about side effects, but it doesn't disclose data freshness, pagination behavior, API rate limits, or whether this is a read-only vs write operation. For a tool that fetches external data and stores it, more behavioral context would be expected.

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?

The description is compact and readable, with a brief summary line followed by a structured Args/Returns section. It's efficient without wasted words. The format mirrors a Python docstring which is familiar to many agents, aiding comprehension.

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

Completeness2/5

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

With zero annotations, no sibling differentiation, and a 0% schema coverage, this description leaves significant gaps. It doesn't mention how results are ordered, what constitutes 'key info' in the returned dictionaries, whether location requires a specific format or country, or how temporary storage interacts with the save_job sibling. An output schema exists, which helps explain return values, but the description still lacks operational context for a tool with 3 parameters and external API side effects.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for parameter documentation. It lists role, location, and max_results with terse one-line descriptions that essentially restate the schema field names ('The role to search for', 'The location to search for', 'The maximum number of jobs to return'). 'Role' and 'location' are ambiguous - role of what (job title? seniority?), and no format or examples are provided for any parameter.

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?

The description states the tool 'Fetch(es) jobs using JSearch API and store(s) them temporarily. Return(s) key info.' This provides a specific verb (fetch) and a resource (jobs via JSearch API), distinguishing it from the sibling 'save_job' tool which implies persistence. However, it doesn't explicitly contrast against save_job in the description, though the 'store them temporarily' phrasing hints at the difference.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus save_job or other alternatives. The description implies 'fetching jobs' is the use case, but lacks any when/when-not statements or mention of the sibling save_job tool. The distinction between temporary storage here and the save_job sibling is only implicit.

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

TDQS

B3/5.0
Disambiguation4/5

The two tools have clearly distinct purposes: search_jobs fetches and lists jobs, while save_job persists a specific job. There is no overlap in their functionality, making misselection unlikely.

Naming Consistency4/5

Both tools follow the verb_noun pattern (search_jobs, save_job) using lowercase snake_case. The consistency is good, though with only two tools there is limited evidence of a broader pattern.

Tool Count2/5

Two tools is quite thin for a job assistant server that presumably requires browsing and managing jobs. Missing operations needed for a complete workflow means the count feels inadequate for the domain.

Completeness2/5

The surface has notable gaps: there's no way to list or retrieve saved jobs, no delete/discard capability, no detailed view of a job, and no pagination beyond max_results. Agents could reach dead ends when trying to manage or review saved jobs.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/eric623/Claude-MCP-Job-Assistant'

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