Server definition
- Hash
- sha256:1ce26834b7ccfa989f128b69f1a2b07c90dee6fe54b18daa10477a9c97d9db79
- What it is
- What a remote MCP server returned when asked what it offers: 6 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "Where job listings come from, licensing, and links to the data provider. Use only when the user asks about data source, Feashliaa, license, attribution, or who built OpenJob.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "explain_data_source",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"affiliation": {
"type": "string"
},
"github": {
"type": "string"
},
"license": {
"type": "string"
},
"license_url": {
"type": "string"
},
"maintainer": {
"type": "string"
},
"openjob_repo": {
"type": "string"
},
"provider": {
"type": "string"
},
"summary": {
"type": "string"
},
"update_cadence": {
"type": "string"
},
"website": {
"type": "string"
},
"what_we_show": {
"type": "string"
}
},
"required": [
"summary",
"provider",
"maintainer",
"license",
"license_url",
"github",
"website",
"openjob_repo",
"affiliation",
"update_cadence",
"what_we_show"
],
"type": "object"
}
},
{
"description": "Plain-language search tips for job seekers. Use when the user asks how to search or what they can filter. No technical jargon in the reply.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "explain_filters",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"filters": {
"items": {
"additionalProperties": false,
"properties": {
"example": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"name",
"example"
],
"type": "object"
},
"type": "array"
},
"if_no_results": {
"items": {
"type": "string"
},
"type": "array"
},
"intro": {
"type": "string"
},
"limitations": {
"items": {
"type": "string"
},
"type": "array"
},
"role_presets": {
"items": {
"additionalProperties": false,
"properties": {
"matches": {
"type": "string"
},
"say": {
"type": "string"
}
},
"required": [
"say",
"matches"
],
"type": "object"
},
"type": "array"
},
"title": {
"type": "string"
},
"verified_examples": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"title",
"intro",
"filters",
"verified_examples",
"limitations",
"role_presets",
"if_no_results"
],
"type": "object"
}
},
{
"description": "Friendly introduction to OpenJob for job seekers. Use when the user is new or asks how this works. Return plain language only.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "get_app_intro",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"cv_note": {
"type": "string"
},
"example_prompts": {
"items": {
"type": "string"
},
"type": "array"
},
"name": {
"type": "string"
},
"seniority_note": {
"type": "string"
},
"tagline": {
"type": "string"
},
"tips": {
"items": {
"type": "string"
},
"type": "array"
},
"welcome": {
"type": "string"
},
"what_it_does": {
"type": "string"
},
"who_its_for": {
"type": "string"
}
},
"required": [
"name",
"tagline",
"welcome",
"what_it_does",
"who_its_for",
"example_prompts",
"tips",
"cv_note",
"seniority_note"
],
"type": "object"
}
},
{
"description": "How much of the job board is loaded and whether search is ready. Explain to the user in simple terms, not technical sync jargon.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "get_index_status",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"baked_index": {
"type": "boolean"
},
"coverage_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"jobs_loaded": {
"type": "number"
},
"message": {
"type": "string"
},
"ready": {
"type": "boolean"
},
"still_loading": {
"type": "boolean"
},
"total_jobs_about": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"ready",
"jobs_loaded",
"total_jobs_about",
"coverage_percent",
"still_loading",
"baked_index",
"message"
],
"type": "object"
}
},
{
"description": "Fetch full posting text for job urls from search_jobs. Set search_mode resume_match when fetching postings to compare against the user's resume or background; keyword_search otherwise. Greenhouse (including embedded careers pages), Ashby, and Lever are supported; other career sites may return unsupported_ats. Closed roles are cached about 24 hours; open postings about 14 days (posting text only, not user resumes). Use description_text to compare against the user's resume or stated background.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"search_mode": {
"description": "keyword_search = role/location/filters only; resume_match = user uploaded a resume (CV) or asked to match jobs to their background or ChatGPT memory.",
"enum": [
"keyword_search",
"resume_match"
],
"type": "string"
},
"url": {
"description": "Single job url from search_jobs results.",
"type": "string"
},
"urls": {
"description": "Up to 10 job urls — preferred after resume match.",
"items": {
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"user_intent": {
"description": "A concise summary of what the user is trying to accomplish, derived from their message or the\nconversation context that triggered this tool call.\nThis is used to understand the user's intent and context to improve the overall user experience.\n\n- For short, self-contained prompts (e.g. \"I want new shoes\"), copy the user message as-is.\n- For longer conversations or detailed requests, summarize the core goal and any relevant\n context in 1-2 sentences. Focus on intent, constraints, and preferences - not the full\n dialogue.\n\nBefore sending, strip all personally identifiable information (PII), including but not\nlimited to:\n - Names (first, last, usernames, handles)\n - Email addresses\n - Phone numbers\n - Physical addresses (street, city, zip/postal code, country when tied to an individual)\n - Dates of birth or exact ages\n - Government-issued ID numbers (SSN, passport, driver's license, etc.)\n - Payment or financial information (card numbers, bank accounts, etc.)\n - IP addresses or device identifiers\n - Account credentials (passwords, tokens, API keys)\n - Health or biometric data\n - Any other information that could identify a specific individual\n\nReplace stripped values with a generic placeholder (e.g. \"[name]\", \"[email]\", \"[address]\").\n\nExamples:\n User: \"I want red running shoes under $100\"\n -> \"I want red running shoes under $100\"\n\n User: \"Hi, I'm John Smith, [email protected], and I'm looking for flights from Paris to\n Tokyo for 2 adults departing around mid-June, budget around EUR2000 total\"\n -> \"Looking for flights from Paris to Tokyo for 2 adults, mid-June, budget ~EUR2000\"\n\n User: \"I need help resetting my password for account ID acct_12345\"\n -> \"I need help resetting my password for account ID [account_id]\"",
"type": "string"
}
},
"type": "object"
},
"name": "get_job_details",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"type": "number"
},
"from_cache_count": {
"type": "number"
},
"jobs": {
"items": {
"additionalProperties": false,
"properties": {
"apply_url": {
"type": "string"
},
"ats": {
"type": "string"
},
"company": {
"type": "string"
},
"description_text": {
"type": "string"
},
"description_truncated": {
"type": "boolean"
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"fetched_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"from_cache": {
"type": "boolean"
},
"status": {
"enum": [
"ok",
"not_found",
"unsupported_ats",
"timeout",
"error",
"empty"
],
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"url",
"title",
"company",
"apply_url",
"ats",
"description_text",
"status",
"from_cache",
"fetched_at",
"expires_at",
"description_truncated"
],
"type": "object"
},
"type": "array"
},
"loaded_ok": {
"type": "number"
},
"requested": {
"type": "number"
}
},
"required": [
"jobs",
"count",
"requested",
"loaded_ok"
],
"type": "object"
}
},
{
"description": "Search open company job listings. Map the user's natural language to filters. Always set search_mode on search_jobs and get_job_details: keyword_search when the user only describes a role, place, or filters; resume_match when they upload a resume/CV or ask to match jobs to their background or memory. Never show parameter names (role_cluster, skill_level, search_mode, etc.) to the user — speak like a career coach. Do not mention data sources or licenses unless the user asks — use explain_data_source for that. Every job has url and apply_url (company careers page). When you list jobs in a table, bullets, or prose, each row must include at least one clickable markdown link to that url — e.g. linked title [Title](url), linked company name, or a separate Apply / View posting link. Never list a job with no way to click through. After search_jobs, add a structured follow-up in the user's language — the widget shows cards; your text adds coaching. Include: (1) a markdown table Role | Company | Fit (use resume/memory when available; otherwise one-line highlight per row); (2) a numbered priority list for applying (top 3–5 with brief rationale); (3) if the user shared background, one CV positioning sentence they can reuse; (4) related title search variants as inline tags (e.g. Entrepreneur in Residence, Venture Development, GTM Associate, Chief of Staff). When the user has a resume or detailed background, call get_job_details on the best 5–8 urls before ranking. Do not invent match percentages. search_jobs live-checks up to 8 Greenhouse/Ashby/Lever listings per search and drops roles confirmed closed on the company site. For deeper advice on a shortlist, call get_job_details on the best urls (batch up to 10) to load full posting text. Use verifiable_only=true when the user wants only listings we can double-check live (~30% of the board). When the user uploads a resume (curriculum vitae) or asks to match jobs to their background (or ChatGPT memory): (1) extract target titles, seniority, locations, remote preference, title keywords, exclusions; (2) if missing both a role and a place, ask one short question; (3) run 2–4 search_jobs calls with varied strategies and search_mode resume_match; (4) for the best 5–10 results call get_job_details with their urls (batch up to 10) and search_mode resume_match; (5) dedupe, rank using description_text when status is ok, explain top picks in plain language with apply links; do not invent percentage match scores. For role families (founder/founder's/founders associate, chief of staff, product manager) pass the user's words in title — OpenJob normalizes spelling variants automatically; role_cluster is optional. hide_recruiters defaults true (skip recruiting agencies).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"ats": {
"description": "Career-site type if user asks, e.g. greenhouse, lever, ashby",
"type": "string"
},
"company": {
"description": "Company name.",
"type": "string"
},
"exclude_keywords": {
"description": "Comma-separated words to exclude from title",
"type": "string"
},
"hide_recruiters": {
"default": true,
"description": "Exclude recruiting-agency posts; default true",
"type": "boolean"
},
"include_keywords": {
"description": "Comma-separated words that must appear in title",
"type": "string"
},
"limit": {
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"location": {
"description": "City, region, or country.",
"type": "string"
},
"min_salary": {
"type": "number"
},
"remote_only": {
"type": "boolean"
},
"role_cluster": {
"description": "Internal preset when user wants a role family: founder_associate | chief_of_staff | product_manager",
"type": "string"
},
"search_mode": {
"description": "keyword_search = role/location/filters only; resume_match = user uploaded a resume (CV) or asked to match jobs to their background or ChatGPT memory.",
"enum": [
"keyword_search",
"resume_match"
],
"type": "string"
},
"skill_level": {
"description": "Seniority if user says junior, senior, etc.",
"enum": [
"intern",
"entry",
"mid",
"senior"
],
"type": "string"
},
"title": {
"description": "Job title keywords from the user's words.",
"type": "string"
},
"user_intent": {
"description": "A concise summary of what the user is trying to accomplish, derived from their message or the\nconversation context that triggered this tool call.\nThis is used to understand the user's intent and context to improve the overall user experience.\n\n- For short, self-contained prompts (e.g. \"I want new shoes\"), copy the user message as-is.\n- For longer conversations or detailed requests, summarize the core goal and any relevant\n context in 1-2 sentences. Focus on intent, constraints, and preferences - not the full\n dialogue.\n\nBefore sending, strip all personally identifiable information (PII), including but not\nlimited to:\n - Names (first, last, usernames, handles)\n - Email addresses\n - Phone numbers\n - Physical addresses (street, city, zip/postal code, country when tied to an individual)\n - Dates of birth or exact ages\n - Government-issued ID numbers (SSN, passport, driver's license, etc.)\n - Payment or financial information (card numbers, bank accounts, etc.)\n - IP addresses or device identifiers\n - Account credentials (passwords, tokens, API keys)\n - Health or biometric data\n - Any other information that could identify a specific individual\n\nReplace stripped values with a generic placeholder (e.g. \"[name]\", \"[email]\", \"[address]\").\n\nExamples:\n User: \"I want red running shoes under $100\"\n -> \"I want red running shoes under $100\"\n\n User: \"Hi, I'm John Smith, [email protected], and I'm looking for flights from Paris to\n Tokyo for 2 adults departing around mid-June, budget around EUR2000 total\"\n -> \"Looking for flights from Paris to Tokyo for 2 adults, mid-June, budget ~EUR2000\"\n\n User: \"I need help resetting my password for account ID acct_12345\"\n -> \"I need help resetting my password for account ID [account_id]\"",
"type": "string"
},
"verifiable_only": {
"description": "Only Greenhouse, Ashby, and Lever (~30% of board) — listings we can live-verify",
"type": "boolean"
},
"verify_live": {
"default": true,
"description": "Live-check Greenhouse/Ashby/Lever and drop listings confirmed closed; default true",
"type": "boolean"
}
},
"required": [
"search_mode"
],
"type": "object"
},
"name": "search_jobs",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"apply_note": {
"type": "string"
},
"count": {
"type": "number"
},
"hints": {
"items": {
"type": "string"
},
"type": "array"
},
"jobs": {
"items": {
"additionalProperties": false,
"properties": {
"apply_url": {
"type": "string"
},
"ats": {
"type": "string"
},
"benefits": {
"items": {
"type": "string"
},
"type": "array"
},
"company": {
"type": "string"
},
"id": {
"type": "number"
},
"is_recruiter": {
"type": "boolean"
},
"is_remote": {
"type": "boolean"
},
"listing_age": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"live_status": {
"enum": [
"verified",
"unverified",
"unchecked"
],
"type": "string"
},
"location": {
"type": "string"
},
"posted_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"salary_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"salary_median": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"skill_level": {
"type": "string"
},
"snippet": {
"type": "string"
},
"tags": {
"items": {
"additionalProperties": false,
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"key",
"label"
],
"type": "object"
},
"type": "array"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"company",
"title",
"location",
"url",
"apply_url",
"ats",
"skill_level",
"is_recruiter",
"salary_median",
"is_remote"
],
"type": "object"
},
"type": "array"
},
"listings_removed": {
"type": "number"
},
"live_checks_run": {
"type": "number"
},
"locale": {
"enum": [
"de",
"en"
],
"type": "string"
},
"model_followup_hint": {
"type": "string"
}
},
"required": [
"jobs",
"count",
"hints",
"locale",
"apply_note",
"model_followup_hint"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:1ce26834b7ccfa989f128b69f1a2b07c90dee6fe54b18daa10477a9c97d9db79 | sha256sum