Stepstone
Fetches job listings from Stepstone.de based on keywords and location parameters.
Stepstone Job Search MCP Server
An Model Context Protocol (MCP) server that lets MCP-compatible clients search the German job portal Stepstone.de. The service exposes a pair of tools for running multi-term job searches and fetching rich job details so assistants such as Claude Desktop or Smithery can surface up-to-date vacancies.
Table of Contents
- Key Features
- Quick Start
- Configuration
- Usage
- Architecture Overview
- Local Development
- Testing
- Troubleshooting
- Contributing
- Support
- Version History
- License
Key Features
- π Multi-term Search β Concurrently queries Stepstone for every search phrase you supply and deduplicates duplicate postings.
- π Location Targeting β Supports German postal codes with a configurable radius (1β100 km) for regional searches.
- π§ Session-aware Follow-ups β Saves results for one hour so you can request full job details later via
get_job_details
. - π‘οΈ Robust Validation β Defensive parameter validation, logging, and graceful error messages for malformed requests.
- π³ Container & CLI Friendly β Works as a plain Python process or inside Docker; integrates cleanly with Smithery and Claude Desktop.
βΉοΈ Note: A Redis cache and other scaling features are mentioned as future enhancements. They are not enabled in the current release.
Quick Start
Prerequisites
- Python 3.8+
pip
- Internet access to reach Stepstone.de when running real searches
Installation Options
npx -y @smithery/cli install @kdkiss/mcp-stepstone --client claude
# Clone the repository
git clone https://github.com/kdkiss/mcp-stepstone.git
cd mcp-stepstone
# Install runtime dependencies
pip install -r requirements.txt
# (Optional) make the server script executable on Unix-like systems
chmod +x stepstone_server.py
# Build the image
docker build -t mcp-stepstone .
# Run the container
docker run -it --rm mcp-stepstone
Configuration
MCP Client Configuration
Smithery mcp.json
{
"mcpServers": {
"stepstone-job-search": {
"command": "python",
"args": ["/path/to/stepstone_server.py"],
"description": "Search for job listings on Stepstone.de",
"env": {
"LOG_LEVEL": "INFO",
"REQUEST_TIMEOUT": "10"
}
}
}
}
Claude Desktop
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"stepstone-job-search": {
"command": "python",
"args": ["/absolute/path/to/stepstone_server.py"],
"env": {
"LOG_LEVEL": "DEBUG",
"USER_AGENT": "MCP-Stepstone-Bot/1.0"
}
}
}
}
Environment Variables
Variable | Default | Description |
---|---|---|
LOG_LEVEL | INFO | Logging verbosity (DEBUG , INFO , WARNING , ERROR ). |
REQUEST_TIMEOUT | 10 | Timeout (seconds) for outbound HTTP requests. |
USER_AGENT | Browser-like UA string | Custom User-Agent presented to Stepstone.de. |
MAX_RETRIES | 3 | Retry attempts for failed HTTP calls. |
CACHE_TTL | 300 | Placeholder for future in-memory caching feature. |
Usage
Available Tools
search_jobs
Runs one or more keyword searches against Stepstone.
Parameters
search_terms
(array of strings, optional) β Search phrases to query. Defaults to["fraud", "betrug", "compliance"]
.zip_code
(string, optional) β German 5-digit postal code. Defaults to"40210"
(DΓΌsseldorf).radius
(integer, optional) β Radius in kilometres around the postal code. Defaults to5
; must be between 1 and 100.
get_job_details
Fetches one stored job and enriches it with full description and metadata.
Parameters
job_index
(integer, optional) β 1-based index into the most recent sessionβs results.job_query
(string, optional) β Fuzzy match against stored jobs. Aliasquery
is also accepted.session_id
(string, optional) β Explicit session identifier (auto-selects the most recent active session when omitted).
β οΈ Provide either
job_index
orjob_query
. Supplying both prioritisesjob_index
.
Example Invocations
// Basic search
{
"tool": "search_jobs",
"parameters": {
"search_terms": ["software engineer", "developer"]
}
}
// Location constrained search
{
"tool": "search_jobs",
"parameters": {
"search_terms": ["marketing manager", "digital marketing"],
"zip_code": "10115",
"radius": 15
}
}
// Fetch job details by index
{
"tool": "get_job_details",
"parameters": {
"job_index": 1
}
}
// Fetch job details by query string
{
"tool": "get_job_details",
"parameters": {
"job_query": "AML Specialist",
"session_id": "550e8400-e29b-41d4-a716-446655440000"
}
}
Sample Output
Job Search Summary:
Search Terms: fraud analyst, compliance officer
Location: 60329 (Β±25km)
Total Jobs Found: 23
Session ID: 550e8400-e29b-41d4-a716-446655440000
--- Results for 'fraud analyst' ---
1. Senior Fraud Analyst - Digital Banking
Company: Deutsche Bank AG
Description: Join our fraud prevention team to analyze transaction patterns...
Link: https://www.stepstone.de/stellenangebote--Senior-Fraud-Analyst-Frankfurt-Deutsche-Bank-AG--1234567
π Job Details: Senior Fraud Analyst - Digital Banking
π’ Company: Deutsche Bank AG
π Location: Frankfurt am Main
π° Salary: β¬65,000 - β¬85,000 per year
β° Employment Type: Full-time, Permanent
π Description:
Join our fraud prevention team to analyze transaction patterns and develop detection algorithms...
β
Requirements:
β’ Bachelor's degree in Computer Science, Finance, or related field
β’ 3+ years experience in fraud detection or financial crime prevention
β’ Strong analytical skills with SQL, Python, or R
β’ Knowledge of AML regulations and compliance frameworks
Architecture Overview
ββββββββββββββββββββββ βββββββββββββββββββββββ βββββββββββββββββββββ
β MCP Client β βββΆ β MCP Stepstone β βββΆ β Stepstone.de β
β (Claude/Smithery) β β Server β β Job Portal β
ββββββββββββββββββββββ βββββββββββββββββββββββ βββββββββββββββββββββ
β
βββββββββββββββββββββββ
β Job Scraper β
β - URL Builder β
β - HTML Parser β
β - Data Cleaner β
βββββββββββββββββββββββ
- Request β MCP client sends tool invocation.
- Validation β Inputs validated (terms, postal code, radius).
- Search β URLs constructed and fetched concurrently.
- Processing β HTML parsed and normalised job entries produced.
- Sessioning β Results stored in memory for one hour for follow-up queries.
- Response β Textual summary returned to the MCP client.
- Details β
get_job_details
fetches the original job page and extracts specifics.
Key modules:
StepstoneJobScraper
β Builds search URLs, fetches and parses job listings.JobDetailParser
β Scrapes detailed job pages for salary, requirements, etc.SessionManager
β Stores search sessions, supports lookup by index or fuzzy match.stepstone_server.py
β Registers MCP tools/resources and handles tool invocations.
Local Development
# Clone repository
git clone https://github.com/kdkiss/mcp-stepstone.git
cd mcp-stepstone
# Create & activate a virtual environment
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Install dev tooling
pip install pytest pytest-asyncio black flake8
# Run formatter and linter
black stepstone_server.py
flake8 stepstone_server.py
Debug Fixtures
A lightweight HTTP server is included to serve bundled HTML fixtures. Start it when adjusting selectors or parsers:
python debug_server.py
Visit http://127.0.0.1:5000
to inspect the mocked Stepstone pages used in tests.
Testing
The test suite uses mocked network responses to avoid contacting Stepstone.de.
pip install -r requirements.txt pytest
pytest
To validate specific tool flows interactively, you can run stepstone_server.py
directly or call handle_call_tool
from a Python shell.
Troubleshooting
Server Wonβt Start
python --version # Expect 3.8+
pip list | grep -E "(requests|beautifulsoup4|mcp)"
ls -la stepstone_server.py # Confirm execute permissions when running directly
No Jobs Returned
- Verify the postal code is a valid five-digit German PLZ.
- Increase
radius
or broadensearch_terms
. - Confirm internet connectivity.
- Stepstone layout changes may require updating selectorsβuse the debug server to compare fixtures.
Import Errors
pip install -r requirements.txt
pip install --upgrade pip
Enable Verbose Logging
export LOG_LEVEL=DEBUG
python stepstone_server.py
Logs are emitted to stdout; integrate with your own logging infrastructure if desired.
Contributing
- Fork the repository and create a feature branch:
git checkout -b feature/my-change
. - Implement your changes and add tests.
- Run
pytest
and lint/format the code (black
,flake8
). - Open a pull request describing the change.
Coding guidelines:
- Follow PEP 8 and include type hints where practical.
- Document public functions with docstrings.
- Handle network and parsing errors defensively.
Support
- π Consult this README for configuration and usage tips.
- π§ͺ Use the debug server to inspect fixture HTML when selectors break.
- π File bugs or feature requests via GitHub Issues.
- π¬ Join the projectβs Discord community (link forthcoming).
Version History
v1.2.0 (Current)
- Added
get_job_details
tool for follow-up queries. - Introduced session management with one-hour TTL.
- Enhanced detail parsing for salary, requirements, and benefits.
- Summaries now include session IDs for easy follow-up.
v1.1.0
- Expanded documentation and usage examples.
- Added Docker support and environment variable configuration.
- Improved error handling and validation.
v1.0.0
- Initial release with multi-term job search and MCP compliance.
License
Distributed under the MIT License.
Made with β€οΈ for the German job market.
Related Servers
Cloudflare Browser Rendering
Provides web context to LLMs using Cloudflare's Browser Rendering API.
yt-dlp-mcp
Download video and audio from various platforms like YouTube, Facebook, and TikTok using yt-dlp.
Puppeteer Vision
Scrape webpages and convert them to markdown using Puppeteer. Features AI-driven interaction capabilities.
Fetch
Fetch web content in various formats like HTML, JSON, plain text, and Markdown.
Bilibili Comments
Fetch Bilibili video comments in bulk, including nested replies. Requires a Bilibili cookie for authentication.
Browser MCP
A fast, lightweight MCP server that empowers LLMs with browser automation via Puppeteerβs structured accessibility data, featuring optional vision mode for complex visual understanding and flexible, cross-platform configuration.
MCP Browser Console Capture Service
A browser automation service for capturing console output, useful for tasks like public sentiment analysis.
Crawl4AI RAG
Integrate web crawling and Retrieval-Augmented Generation (RAG) into AI agents and coding assistants.
Buienradar
Fetches precipitation data for a given latitude and longitude using Buienradar.
Browser Use
Enables AI agents to control web browsers using natural language commands.