job-search-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@job-search-mcpanalyze this job offer from Acme Corp"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
job-search-mcp
Servidor MCP local que gestiona una busqueda de empleo sobre archivos Markdown.
El servidor no razona. El usuario habla con Claude, y Claude usa este servidor para leer y escribir sus archivos con una estructura fija. El cerebro es el cliente; esto es la memoria y las manos.
De un solo usuario, sin red, sin base de datos.
Concepto central: dos archivos separados
Es la idea que sostiene todo lo demas.
perfil-skills.mdes lo que YA se tiene. Todo a nivel[solido]o[parcial], nunca huecos. Un termino entra aqui solo cuando el usuario confirma que lo tiene.radar-huecos.mdes lo que el mercado pide y no se tiene, cada termino con un contador de cuantas ofertas objetivo lo han pedido. Ordenado por contador: lo de arriba es lo mas urgente de aprender.
Ciclo de vida de una skill: nace como hueco cuando una oferta la pide, su contador sube cada vez que otra oferta la vuelve a pedir, y se gradua cuando el usuario confirma que la ha adquirido: sale del radar y entra en el perfil con su nivel. Ese es el unico camino de hueco a perfil.
Related MCP server: Job Application MCP
Modelo de datos
Todo vive en DATA_DIR, un directorio que es a la vez una boveda de Obsidian.
El MCP escribe los .md y Obsidian los renderiza: la misma carpeta, cero
conflicto.
DATA_DIR/
perfil/
perfil-skills.md - [solido|parcial] Termino (nota) bajo '## Categoria'
radar-huecos.md - [contador: N] Termino (Categoria). Fuentes: a; b
criterios.md prosa libre: que hace que una oferta merezca el tiempo
cv.md CV en Markdown, fuente de la evidencia concreta
ofertas/
AAAA-MM-empresa.md frontmatter YAML + analisis + registro de estados + notasEstados de una oferta:
analizada -> solicitada -> entrevista -> oferta -> aceptada, con dos salidas
laterales desde cualquier punto: denegada y descartada.
El servidor nunca regenera un archivo
Parsea solo las lineas que reconoce y edita esa linea concreta, dejando el
resto de bytes intactos. El discriminador es el patron (- [contador: N] ), no
la posicion: por eso una seccion ## Reglas llena de vinietas normales convive
sin problema con las lineas de datos.
Esto es deliberado. Los archivos los edita tambien un humano en Obsidian, asi que el formato es del usuario, no del servidor.
Superficie MCP
Resources (solo lectura, los adjunta el usuario)
URI | Contenido |
| perfil-skills.md |
| radar-huecos.md, ordenado por contador al servir |
| cv.md |
| criterios.md |
| tabla del pipeline: estado, empresa, puesto, score |
| una oferta entera: analisis, estados y notas |
Tools (escriben, los invoca el modelo)
Tool | Que hace |
| Sube el contador en 1 y anade la fuente. Si no existe, lo crea con 1. Nunca duplica. |
| Huecos ordenados por contador descendente. |
| La graduacion: saca del radar y mete en el perfil. Descarta las fuentes: al perfil solo viaja la evidencia. |
| Cambia solido/parcial de algo que ya esta en el perfil. |
| Crea o actualiza una oferta. Al actualizar conserva estado y notas. |
| Mueve por el ciclo de vida y lo anota con fecha. |
| Nota fechada en "Notas de entrevista". |
| Diagnostico: responde y dice sobre que |
Prompt (lo invoca el usuario)
analyze_offer devuelve la plantilla de analisis rellenada con perfil, CV y
criterios leidos del disco en ese instante, mas las instrucciones de guardar
la oferta con save_offer y registrar cada hueco con record_gap. Debajo se
pega el texto de la oferta.
Instalacion
Requiere Node >= 18 (probado con 24).
npm install
npm run buildConfiguracion: una unica variable de entorno.
Variable | Por defecto |
|
|
Comprobar que arranca (imprime la ruta de datos y se queda esperando en stdio):
$env:JOB_MCP_DATA_DIR="<ruta a la boveda>"
node build/index.jsRegistrarlo en un cliente
Es un servidor stdio: el cliente lo lanza como proceso hijo. La declaracion tiene siempre esta forma:
{
"command": "node",
"args": ["<ruta al repo>/build/index.js"],
"env": { "JOB_MCP_DATA_DIR": "<ruta a la boveda>" }
}Claude Code:
~/.claude.json, oclaude mcp add job-search --scope user -- node <ruta>/build/index.js.Claude Desktop: bloque
mcpServersenclaude_desktop_config.json. Usa la ruta absoluta del ejecutable de node: Desktop se lanza desde el explorador y no hereda el PATH.
Las rutas concretas de esta maquina estan en
SETUP.local.md, fuera de git.
La regla que mas tiempo cuesta aprender
Cada
npm run buildobliga a reiniciar el cliente.
Un servidor MCP por stdio se lanza una vez, cuando arranca el cliente, y ese proceso se queda vivo. No hay recarga en caliente. Cerrar la ventana de Claude Desktop no basta: hay que salir desde el icono de la bandeja del sistema.
Sintoma tipico: pides un tool nuevo y el cliente jura que no existe.
Desarrollo
npm run build # tsc -> build/
npm test # tsc + node --test "build/**/*.test.js" (40 tests)
npm run watch # recompilar al guardarsrc/
index.ts solo cablea: resources + tools + prompts + transporte stdio
config.ts DATA_DIR y rutas derivadas
resources.ts los 6 resources
tools.ts los 8 tools, con sus esquemas Zod
prompts.ts analyze_offer
lib/
markdown.ts primitivas por linea: cabeceras, secciones, EOL, normalize
skills.ts perfil-skills.md
radar.ts radar-huecos.md y los contadores
offers.ts frontmatter, estados y notas
graduate.ts confirm_skill: la operacion que cruza los dos archivos
files.ts el UNICO modulo con I/Osrc/lib/* son funciones puras con la forma
(contenido, args) -> { contenido, changed, message }. Por eso los tests no
tocan el disco y corren en 100 ms.
graduate.ts devuelve los dos contenidos nuevos sin escribir: quien llama
persiste ambos o ninguno. Es lo mas cerca de una transaccion que tiene sentido
aqui.
Nunca uses console.log en el servidor. stdout es el canal JSON-RPC y
escribir ahi rompe el protocolo. Los logs van a console.error (stderr).
Probar el servidor sin ningun cliente, hablandole JSON-RPC crudo:
$msgs = @(
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"m","version":"0"}}}'
'{"jsonrpc":"2.0","method":"notifications/initialized"}'
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
)
$msgs | node build/index.jsDonde aparece cada primitivo en el cliente
Los tres primitivos tienen puntos de entrada distintos, segun quien decide usarlos:
Primitivo | Quien lo invoca | Donde aparece |
Prompt | el usuario | menu |
Tool | el modelo | no se invoca desde un menu: se pide hablando |
Resource | el usuario | menu de adjuntar |
Obsidian
El DATA_DIR es una boveda. Dos plugins, y de momento solo estos:
Dataview: tabla viva del radar ordenada por contador, y tabla de ofertas filtrada por estado, apoyada en el frontmatter YAML.
Kanban: el pipeline de ofertas como tablero por estado.
La vista de grafo y los [[enlaces]] salen gratis.
Fuera de alcance
Sin base de datos (son Markdown a proposito, legibles y versionables a mano), sin interfaz web, sin scraping de portales, sin multiusuario, sin nube. Corre local.
Las mejoras aparcadas estan en IDEAS.md.
Available Tools
8 toolsadd_offer_noteAnotar en una ofertaA
Anade una nota fechada a la seccion 'Notas de entrevista' de una oferta. Para quien me entrevista, que me preguntaron, feedback recibido o cualquier cosa que quiera releer antes de la siguiente ronda. Las notas se acumulan, nunca se sobrescriben.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Id de la oferta. | |
| note | Yes | Texto de la nota. Admite varias lineas y Markdown. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-destructive behavior (destructiveHint=false), and the description confirms notes accumulate without overwriting. It adds that notes are dated (timestamped) and placed in a specific section, going beyond annotations. However, it doesn't detail return behavior or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states the action, second provides context on content and behavior. No wasted words, front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 parameters and no output schema, the description covers purpose, usage context, and behavioral traits (accumulation, dating). Given the sibling tools, this is sufficient for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for both parameters ('id' and 'note'), achieving 100% coverage. The tool description repeats that notes accumulate (behavior) but adds no additional semantic detail about the parameters themselves (e.g., format, constraints beyond schema). Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool adds a dated note to the 'Notas de entrevista' section of an offer. It specifies the kind of content suitable for the note (interviewer, questions asked, feedback, anything to review before next round). This distinguishes it from siblings like update_skill_level or confirm_skill.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that notes accumulate and never overwrite, which is a key usage behavior. It implicitly tells when to use (for interview-related notes) but does not explicitly compare to alternatives or specify when not to use. Still, it provides clear context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_skillGraduar skillA
La graduacion: confirma que ya tengo una skill que estaba en el radar. La saca del radar y la mete en perfil-skills.md con su nivel y la evidencia. Es el UNICO camino de hueco a perfil. Usalo solo cuando el usuario confirme que lo ha adquirido (certificacion, proyecto o experiencia real), nunca por iniciativa propia.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Termino tal y como aparece en el radar. | |
| level | Yes | solido = lo defiendo en entrevista con evidencia en un proyecto. parcial = lo he tocado, no lo domino. | |
| category | No | Solo si el hueco no traia categoria en el radar. | |
| evidence | Yes | Por que puedo defenderlo: certificacion, proyecto o experiencia. Va al perfil como nota. La oferta que origino el hueco NO se conserva. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals side effects: removes from radar, adds to profile, discards the original offer. Annotations only provide idempotentHint=false and destructiveHint=false, but the description adds significant behavioral context not covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, dense with information, front-loaded with the key concept, and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, usage constraints, parameter nuances, and behavioral effects. It is fully sufficient for an agent to decide when and how to invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description still adds value: it explains that 'term' must match the radar exactly, that 'evidence' is a note and the offer is not preserved, and that 'category' is optional only if missing from radar.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'confirma' (confirms) and the resource 'skill', and explains that it moves a skill from the radar to the profile. It distinguishes itself as the ONLY path from gap to profile, differentiating it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use only when the user confirms acquisition and never on own initiative. It does not name sibling tools as alternatives, but the context and the phrase 'UNICO camino' imply exclusivity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gapsListar huecosARead-only
Devuelve todos los huecos del radar ordenados por contador descendente: lo primero es lo que mas ofertas han pedido y por tanto lo mas urgente de aprender.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint annotation, description adds ordering logic and semantic urgency meaning, but doesn't disclose auth or other behaviors (though not needed for a simple read).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One clear, front-loaded sentence with no wasted words. Perfectly concise for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and high schema coverage, description fully covers what the tool does. No gaps in understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so baseline 4 applies. Description adds no param info since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns all gaps sorted by counter descending, which is a specific verb-resource combination. It distinguishes from siblings like record_gap which are for writing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when/when-not guidance, but purpose is clear enough that an agent can infer usage. No mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingPingARead-only
Comprueba que el servidor esta vivo y sobre que carpeta de datos esta trabajando.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating safe read operation. The description adds that it checks the alive status and data folder, providing context beyond the annotation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the purpose. It is front-loaded with the action and resource, with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and a simple purpose, the description is fully complete. It tells the agent exactly what the tool does and what it returns (status and folder).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the baseline is 4. The description doesn't need to add parameter meaning beyond what the schema provides (empty).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('comprueba' meaning checks) and identifies the resource (server aliveness and data folder). It clearly distinguishes from sibling tools (skills, offers, gaps) which are unrelated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context implies this is a health check tool for verifying server status, which is clear. It doesn't explicitly state when not to use or list alternatives, but the purpose is straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_gapRegistrar huecoA
Registra que una oferta pide una skill que NO tengo. Si el termino ya esta en el radar sube su contador en uno y anade la fuente; si no esta, lo crea con contador 1. Nunca duplica. Llamalo una vez por cada skill que la oferta pida y falte en mi perfil, incluidos los terminos que no sabria definir en una entrevista.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | La skill o concepto que falta, tal y como lo llamaria un ingeniero. Ej: 'Kubernetes'. | |
| source | Yes | Oferta que lo pide, para poder rastrearlo. Ej: 'Google SWE II, Malaga'. | |
| category | Yes | Categoria a la que pertenece, para saber bajo que '##' colocarla en el perfil cuando se gradue. Ej: 'Infraestructura'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully explains the tool's behavior beyond annotations. It specifies that the tool never duplicates, increments a counter and adds the source if the term exists, or creates it with counter 1 if new. This provides clear behavioral transparency. Annotations indicate it is not idempotent (idempotentHint: false) and not destructive (destructiveHint: false), and the description aligns with these traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences. The first sentence states the core action and behavior, and the second provides clear usage guidance. Every sentence adds value without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 required parameters, no output schema), the description covers all necessary context: what the tool does, its behavioral details (upsert logic), and precise usage instructions. It is complete for an agent to understand when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are documented. The description adds value by providing concrete examples for each parameter (e.g., 'Kubernetes' for term, 'Google SWE II, Malaga' for source, 'Infraestructura' for category), which clarifies the expected format and granularity beyond the schema's brief descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: recording that an offer asks for a missing skill. It uses specific verbs ('registra') and resources ('una oferta pide una skill que NO tengo'). It distinguishes itself from sibling tools like 'confirm_skill' (which likely confirms a skill) and 'list_gaps' (which lists gaps).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to call the tool: once per missing skill per offer, including terms the user couldn't define. It does not explicitly state when not to use it or provide alternatives, but the context ('terminos que no sabria definir en una entrevista') implies it should be used for truly unknown skills. Sibling tool names like 'confirm_skill' and 'update_skill_level' suggest alternatives for existing skills, but this is not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_offerGuardar analisis de ofertaAIdempotent
Crea o actualiza el archivo de una oferta con su analisis. Si la oferta ya existia se sustituye SOLO el analisis: el estado y las notas de entrevista se conservan.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identificador y nombre de archivo, formato AAAA-MM-empresa. Ej: '2026-07-google'. | |
| url | No | Enlace a la oferta original. | |
| tags | No | Etiquetas cortas. Ej: ['backend','bigtech']. | |
| score | No | Puntuacion 0-12 sumando los seis ejes de criterios.md. | |
| title | Yes | Puesto tal y como lo titula la oferta. | |
| company | Yes | Empresa. | |
| salario | No | Rango o cifra tal y como la publica la oferta. | |
| markdown | Yes | El analisis completo en Markdown, con los seis puntos de la plantilla. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as idempotent and non-destructive. The description adds useful context by specifying that only the analysis is replaced while status and notes are preserved. This goes beyond annotations and helps the agent understand what mutations occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The main action is front-loaded, and the second sentence clarifies behavior. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters and no output schema, the description covers the core behavior, idempotency, and preservation semantics. It lacks mention of return values or error cases, but for a save/update tool it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all parameters. The description adds some context for the 'markdown' parameter (expects six-point template), but does not add value for other parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates or updates an offer file with its analysis, and explicitly distinguishes from siblings by stating that status and interview notes are preserved. The verb 'crea o actualiza' and resource 'archivo de una oferta con su analisis' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to save/update analysis) and when not to (for status/notes updates, use sibling tools). However, it does not explicitly name alternative tools like 'set_offer_status' or 'add_offer_note', so the guidance is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_offer_statusCambiar estado de una ofertaAIdempotent
Mueve una oferta por su ciclo de vida y deja el cambio anotado con fecha en su registro. Ciclo: analizada -> solicitada -> entrevista -> oferta -> aceptada. Salidas laterales desde cualquier punto: denegada (me rechazan) y descartada (decido no seguir).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Id de la oferta. Ej: '2026-07-google'. | |
| status | Yes | Nuevo estado, uno de los siete del ciclo de vida. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotent and non-destructive. Description adds that changes are recorded with date, enriching the behavioral context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: action+effect, cycle definition, lateral exits. No wasted words, well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 params and no output schema, description adequately explains lifecycle and lateral moves. Could mention validation or error handling, but sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% with descriptions. The description adds lifecycle meaning to the status parameter beyond the enum list, providing useful context for the cycle order.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool moves an offer through its lifecycle and records the change. It specifies the cycle sequence and lateral exits, distinguishing it from siblings like save_offer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied as moving an offer status, but no explicit when-to-use vs alternatives or exclusions are given. Could mention that save_offer is for other modifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_skill_levelCambiar nivel de una skillAIdempotent
Cambia el nivel de un termino que YA esta en perfil-skills.md. Para algo que aun no esta en el perfil usa confirm_skill.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Termino tal y como aparece en perfil-skills.md. | |
| level | Yes | Nuevo nivel: solido o parcial. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotent and non-destructive behavior. Description does not contradict and adds minimal additional context (the update action is obvious).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action, efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with only two params and no output schema. Description covers core purpose and usage context, though could mention what happens if term not found.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds no extra meaning beyond what schema already provides for term and level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it changes the level of a term already in perfil-skills.md, and distinguishes from confirm_skill for terms not yet in the profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use (terms already in profile) and alternative (use confirm_skill for new terms).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
8 tool updates
v0.1.0- First observed
add_offer_note - First observed
confirm_skill - First observed
list_gaps - First observed
ping - First observed
record_gap - First observed
save_offer - First observed
set_offer_status - First observed
update_skill_level
TDQS
Each tool has a distinct purpose: skill management (update_skill_level, record_gap, list_gaps, confirm_skill), offer management (save_offer, set_offer_status, add_offer_note), and health check (ping). No overlapping or ambiguous tools.
All tools follow a consistent verb_noun pattern in snake_case, e.g., record_gap, list_gaps, set_offer_status. The naming is predictable and clear.
With 8 tools covering skill tracking and offer management, the server is well-scoped. Each tool serves a necessary function without redundant or excessive entries.
The set covers core workflows: skill gap analysis and offer lifecycle. Missing features like listing offers or direct skill removal are minor gaps that agents can work around.
Maintenance
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
Public MCP server for discovering open jobs. Search, filter, and get application links.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
GetJobzi MCP server for job search, application tracking, and career forecasting.
AI job search MCP — fact-checked jobs, application tracker, alerts. ChatGPT, Claude, Cursor.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for browsing and searching your local resume and job application documents191GPL 3.0
- AlicenseNot gradedqualityAmaintenanceA local-first, open-source MCP server that analyzes jobs, matches your CV, tailors documents, and tracks applications — all on your machine with no data uploaded.AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceAn MCP server that enables Claude to search live job postings, rank them against a user's skills profile, and track application statuses locally.-
- AlicenseAqualityCmaintenanceA privacy-first MCP server for locally managing job, fellowship, and graduate-school applications. It offers tools for tracking application status, analyzing role fit, generating LaTeX CV/cover letters, interview prep, and discovering public jobs from ATS APIs.81MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/JonniThorpe/MCP-JobQualifications'
If you have feedback or need assistance with the MCP directory API, please join our Discord server