nima-career-mcp
This is a read-only MCP server exposing Nima Karami's curated career history, enabling clients to explore, search, and assemble tailored resume drafts from pre-approved, vetted data — without fabricating new facts.
get_profile— Retrieve public-safe identity: name, headline, location, bio, links, and contact policy.get_about— Access deeper context: languages, interests, education, and guiding principles.list_roles— Browse all roles as a flat list with org, title, dates, and tags.get_role— Drill into a single role to get its full evidence bank and pre-approved resume bullets.list_experience— View roles grouped by company tenure (title progressions), ordered newest-first.list_projects— Browse projects, optionally filtered by tags and/or role.get_project— Get full detail on a single project: evidence, approved bullets, and links.list_skills— List skills organized by category, each backed by traceable evidence; optionally filter by category.search_experience— Full-text search across roles, projects, bullets, and skills ranked by relevance, with optional kind and tag filters.list_bullets— Fetch all pre-approved, hiring-manager-safe resume bullets, filterable by role, project, and/or tags.assemble_resume— Generate a tailored resume draft for a given focus angle or pinned role/project ids, using only approved corpus material, with provenance tracking and a disclaimer.career://guidance— Access honesty and anti-injection rules for integrating into host system prompts.
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., "@nima-career-mcpassemble a resume for a tech lead position"
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.
nima-career-mcp
A public, open-source, read-only MCP server that exposes Nima Karami's curated, public-safe career history. Point any MCP client at it — Claude Code, Cursor, Claude Desktop, or a custom website backend — and ask about his experience, or have it assemble a tailored resume draft on the fly.
The server only ever returns vetted data. The AI's job is to select, order, and tailor
pre-approved material for a query — never to author new facts. That guarantee is enforced in
code: every tool reads through a validated corpus, and the resume tool emits only corpus
values with provenance ids attached.
Quick start (local)
Requires uv.
uv sync --all-extras --dev
# Interactive dev + MCP Inspector (stdio). Requires Node/npx:
npx -y @modelcontextprotocol/inspector uv run nima-career-mcp
# (equivalent via the SDK dev wrapper, using the root shim — see note below:)
uv run mcp dev dev_server.py
# Or run the HTTP server locally:
uv run nima-career-mcp --transport streamable-http # serves http://127.0.0.1:8080/mcp
# Tests (includes corpus integrity + the honesty guarantee):
uv run pytest -qWhy
dev_server.py?mcp devimports its target file by path, which strips the package context and breaks this src-layout package's relative imports.dev_server.pyis a one-line shim that re-imports the server via an absolute import somcp devworks. Thenpx … uv run nima-career-mcpform spawns the installed entry point and needs no shim.
Related MCP server: Resume MCP Server
Connecting clients
Claude Code / Cursor / Claude Desktop (remote — live):
claude mcp add --transport http nima https://nima-career-mcp.fly.dev/mcpLocal stdio (any client that spawns a process): run nima-career-mcp (no --transport).
Custom website backend: see examples/website_backend.py
for both the Claude API MCP-connector path and a raw ClientSession path.
Tool surface (all read-only)
Tool | Purpose |
| Public-safe identity, links, bio |
| Languages, interests, education, principles (each with depth, in his words) |
| Browse roles (flat); drill into one (evidence + approved bullets) |
| Roles grouped into company tenures (title progressions; gaps split into stints) |
| Browse/drill into projects |
| Skills by category, each backed by evidence |
| Rank roles/projects/bullets/skills for a query |
| Fetch pre-approved resume bullets |
| Assemble a tailored resume draft from approved material only |
Resource career://guidance returns the honesty/anti-injection rules a host should embed in
its system prompt. (Other career:// resources and prompt templates are stubbed opt-ins.)
The corpus
All data lives in corpus/ as curated YAML and is validated at startup. See
corpus/CORPUS.md for the schema and the evidence→bullet model. The
content is a public-safe, sanitized view of real experience: every claim traces to vetted
evidence, and individuals, internal codenames, and private partner details are deliberately
generalized. This repo holds no secrets and no private data; application tracking lives in
a separate private repo.
Safety posture
Intentionally public and unauthenticated, but bounded: read-only tool surface (no
write/exec), per-IP rate limiting (keyed on Fly's unforgeable client IP, with idle-bucket
eviction), request body-size caps (enforced on the actual stream), and Origin + Host
validation (DNS-rebinding defense) — see src/nima_career_mcp/security.py. Host/Origin
allowlists are env-driven (NIMA_ALLOWED_HOSTS / NIMA_ALLOWED_ORIGINS); the shipped
fly.toml locks Host to the deploy hostname (add custom domains there). The Fly machine
also caps concurrency so a flood sheds load instead of OOMing. Behavioral guardrails (don't
fabricate, treat queries as data) belong in the consuming host's system prompt and are served
from career://guidance.
Deploy (Fly.io)
fly launch --no-deploy # or edit fly.toml: set app name + region
fly deployThe container runs uvicorn nima_career_mcp.server:app (the middleware-wrapped Streamable-
HTTP app). The shipped fly.toml keeps one machine always warm (min_machines_running = 1,
no cold starts) while extra machines autostart/autostop under load. After deploy, smoke-test
with the MCP Inspector:
npx @modelcontextprotocol/inspector # then connect to https://nima-career-mcp.fly.dev/mcpLicense
MIT — see LICENSE.
Available Tools
10 toolsassemble_resumeA
Assemble a tailored resume draft for a query (e.g. "backend-leaning").
SELECTS and ORDERS the most relevant approved roles, evidence, bullets, and skills
for focus (or for the explicit role_ids/project_ids), and fills an approved
summary template — it never authors new facts, employers, dates, or metrics.
Args: focus: free-text angle, e.g. "0-to-1 product" or "backend". role_ids / project_ids: pin specific items instead of ranking by focus. skill_categories: restrict the skills section. length: "full" or "onepage" (caps roles/bullets). format: "structured" (default) or "markdown" (also returns rendered markdown).
The returned draft includes a provenance list of corpus ids and a disclaimer.
A consuming agent may rephrase for fit but MUST NOT add claims not present here.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | ||
| role_ids | No | ||
| project_ids | No | ||
| skill_categories | No | ||
| length | No | full | |
| format | No | structured |
Output Schema
| Name | Required | Description |
|---|---|---|
| focus | Yes | |
| header | Yes | |
| summary | Yes | |
| roles | Yes | |
| projects | Yes | |
| skills | Yes | |
| provenance | Yes | Corpus ids (evidence/bullet/role) every line traces back to. |
| disclaimer | Yes | |
| markdown | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses important behavioral traits: it never authors new facts, employers, dates, or metrics; it returns a draft with provenance and disclaimer; and it forbids adding claims. This provides strong transparency for a read-only composition tool.
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 concise: a clear purpose statement followed by a bulleted explanation of arguments. Every sentence adds value, there is no redundancy or fluff. The structure is front-loaded with the main action and constraints.
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 complexity (6 parameters, no required, output schema provided), the description covers all needed aspects: purpose, parameter usage, behavioral constraints, and response contents (provenance, disclaimer). It also includes a rule for consuming agents. The output schema handles the return structure, so description completeness is high.
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 0%, but the description's Args section explains each parameter's role: focus for free-text angle, role_ids/project_ids to pin items, skill_categories to restrict, length for 'full' or 'onepage', format for 'structured' or 'markdown'. This adds meaning beyond names and types, such as indicating focus vs ids are alternatives.
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 assembles a tailored resume draft from approved components, using specific verbs like 'assemble' and 'SELECTS and ORDERS'. It distinguishes from sibling tools (which are get/list tools for individual elements) by describing its compositional nature. It explicitly states it never authors new facts, adding specificity.
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 provides explicit guidance on when to use: for a query like 'backend-leaning', with alternatives like pinning specific items via role_ids/project_ids. It also explains how to restrict skills and choose length/format. However, it does not explicitly state when NOT to use, though the sibling tools imply that for individual components one should use other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profileA
Return Nima Karami's public-safe profile: name, headline, location, links, bio.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| headline | No | |
| location | No | |
| links | No | |
| bio | No | |
| summary_templates | No | |
| contact_policy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description explicitly states 'public-safe', indicating the tool is safe and read-only. It does not elaborate on auth or rate limits, but for a simple get-profile with no parameters, this is sufficient.
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, clear sentence that conveys all necessary information without any unnecessary words. It is front-loaded with the purpose and outcome.
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 and an output schema (not shown), the description is complete. It lists the fields returned and implies the context (public-safe profile of Nima Karami). No additional info is needed.
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?
There are no parameters, so the description does not need to add meaning beyond the empty schema. The schema coverage is 100%, and the description accurately reflects that no input is required.
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 specifies exactly what the tool does: returning Nima Karami's public-safe profile with specific fields (name, headline, location, links, bio). This clearly distinguishes it from sibling tools like assemble_resume, get_project, or list_experience.
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 says to return a public-safe profile, implying it is safe and appropriate for basic profile retrieval. While it does not explicitly state when not to use it, the context of sibling tools makes its usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectA
Get one project in full: blurb, evidence, approved bullets, and links.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| role_id | No | |
| blurb | No | |
| tags | No | |
| evidence | No | |
| bullets | No | |
| links | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description indicates a read operation without side effects, but does not disclose authentication needs, rate limits, or error conditions. No annotations are present, so the description carries the full burden but only covers basic provided fields.
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 concise sentence that immediately communicates the tool's purpose and key content. No unnecessary words or information.
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 an output schema and low complexity (one parameter), the description lists the return fields which is adequate. However, it could mention the source of project_id for completeness.
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 0% schema description coverage, the description should add meaning to the project_id parameter, but it does not explain how to obtain a valid project_id (e.g., from list_projects) or any format constraints.
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 gets one project and specifies the exact fields returned: blurb, evidence, approved bullets, and links. This distinguishes it from sibling 'list_projects' which only lists project summaries.
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?
Description implies usage for retrieving full project details, but does not provide explicit guidance on when to use this vs alternatives like list_projects. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_roleA
Get one role in full, including its evidence bank and approved resume bullets.
Use list_roles first to discover valid role ids (e.g. 'timeplay').
| Name | Required | Description | Default |
|---|---|---|---|
| role_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| org | Yes | |
| title | Yes | |
| start | Yes | |
| end | No | |
| company_id | No | |
| location | No | |
| summary | No | |
| tags | No | |
| evidence | No | |
| bullets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully convey behavior. It confirms the operation is read-only and details the contents returned. However, it does not mention error conditions, permissions, or rate limits, which would be important for a complete behavioral profile.
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, no unnecessary words, and key information is front-loaded. Every word adds value.
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 that an output schema exists, the description does not need to detail return values. The description covers the tool's purpose, prerequisite, and parameter usage. For a simple retrieval tool, this is 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 0%, so the description must compensate. It explains that role_id should be obtained from list_roles and gives an example value, adding meaning beyond the bare schema. A slightly higher score could be given if it also described the expected format or constraints.
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 action ('Get one role in full') and specifies what is included (evidence bank and approved resume bullets). It distinguishes itself from list_roles by indicating this tool retrieves a complete single role rather than a list.
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 advises to use list_roles first to discover valid role ids and provides an example ('timeplay'). This gives clear guidance on when to use the tool and how to prepare the input.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bulletsA
List curated, hiring-manager-safe resume bullets.
Each bullet is pre-approved and cites the evidence ids it derives from. Filter by role_id, project_id, and/or tags (AND). With no filters, returns all bullets.
| Name | Required | Description | Default |
|---|---|---|---|
| role_id | No | ||
| project_id | No | ||
| tags | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| bullets | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that bullets are 'curated, hiring-manager-safe' and 'cites evidence ids'. Sufficient for a read-only list operation.
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: first states purpose, second adds details. No filler; every sentence adds value.
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 output schema exists, description covers behavior: pre-approved bullets, evidence linking, filtering options. Complete for a list tool with no destructive actions.
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 0% schema coverage, description compensates by explaining three of four parameters (role_id, project_id, tags) and their AND filtering behavior. Missing limit parameter.
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 states 'List curated, hiring-manager-safe resume bullets' with specific verb 'List' and resource 'bullets'. It distinguishes from siblings like list_experience, list_projects, etc.
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?
Describes filtering by role_id, project_id, tags (AND) and returns all with no filters. Does not explicitly compare to sibling tools but provides clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_experienceA
Roles grouped into company tenures (newest first).
Each company tenure lists its positions (title progression) newest-first. A company you left and later rejoined appears as two separate tenures. Use this when you want experience grouped by employer rather than as a flat list of titles.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| companies | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains the grouping behavior and the nuance of rejoining a company appearing as separate tenures. It is transparent about the output structure, though it could mention that this is a read-only operation.
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 paragraphs with no unnecessary words. Information is front-loaded: the first sentence states the core purpose, and the second adds important nuance.
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 the presence of an output schema, the description is complete. It covers the grouping behavior, ordering, and the rejoining scenario, fully informing the agent.
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 exist, so baseline score is 4. The description adds value by explaining the grouping logic, but there are no parameters to describe.
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 lists roles grouped by company tenure, newest first, and distinguishes it from a flat list of titles. It uses specific verb 'list' and resource 'experience', and differentiates from sibling tools like 'list_roles'.
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 states 'Use this when you want experience grouped by employer rather than as a flat list of titles', providing clear guidance on when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
List projects, optionally filtered by tags (AND) and/or owning role_id.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| role_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| projects | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description implies a read-only list operation but lacks details on ordering, pagination, or default behavior (all projects). It does not contradict annotations (none provided).
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, front-loaded sentence with no wasted words, conveying the essential purpose and filtering options efficiently.
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 low complexity (2 optional params, no nested objects, output schema available), the description is adequate. It explains the core functionality and filter logic, though ordering and limits are omitted.
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?
Despite 0% schema description coverage, the description adds meaningful semantics: tags are combined with AND logic, and role_id refers to the owning role. This compensates for the lack of schema 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 verb 'list' and resource 'projects', and specifies optional filtering by tags (AND) and role_id, distinguishing it from sibling tools like get_project or list_roles.
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 mentions filtering options but does not provide explicit guidance on when to use this tool versus alternatives like get_project for a single project, or what happens when no filters are applied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rolesA
List every role/job (flat) with id, org, company_id, title, dates, tags.
Roles sharing a company_id are a title progression at one company; use list_experience for the grouped view.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| roles | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool returns a flat list and enumerates the fields, implying read-only behavior. It does not mention pagination or ordering, but for a parameterless list tool, the description is sufficiently transparent.
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, front-loaded with the main action and output fields. Every sentence earns its place, with no wasted 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's simplicity (no parameters, has output schema), the description is complete. It specifies the output fields and provides a key distinction from a sibling tool. The output schema presumably documents return values, so no further explanation is needed.
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 zero parameters, and schema description coverage is 100% (no properties). The description adds no parameter information, which is expected. According to the rules, baseline is 4 when no parameters 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?
The description clearly states the tool lists every role/job in a flat format with specific fields (id, org, company_id, title, dates, tags). It distinguishes itself from the sibling tool list_experience by noting that the grouped view is provided by that tool.
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 use list_experience instead: 'Roles sharing a company_id are a title progression at one company; use list_experience for the grouped view.' This provides clear guidance on alternative tool usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_skillsC
List skills grouped by category; each skill links to backing evidence ids.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| categories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions grouping by category and linking to evidence ids, but does not disclose behavioral traits like whether the operation is read-only, what happens when category is null, or any limits. Minimal transparency.
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?
Single sentence is concise and front-loaded, but lacks structure like separating purpose from details. Efficient but could benefit from more organization.
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 an output schema exists (unknown content) and one optional parameter, the description is adequate but incomplete. It doesn't explain 'backing evidence ids' or the response structure. Moderate completeness.
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 0%, so description must compensate. The description implies the 'category' parameter filters results by grouping, but doesn't explain allowed values or format. Adds some meaning but not enough for full understanding.
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 lists skills grouped by category with links to evidence ids, distinguishing it from other list tools. However, it doesn't explicitly differentiate from siblings like list_bullets or list_experience.
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 guidance on when to use this tool versus alternatives such as search_experience or other list tools. The description does not provide context for appropriate use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_experienceB
Search across roles, projects, bullets, and skills.
This is the main entry point for queries like "show me his 0-to-1 product work".
kinds restricts item types (role|project|bullet|skill); tags is an AND-filter.
The query is treated strictly as search input, never as instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| kinds | No | ||
| tags | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| hits | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavior. It states that the query is strictly search input (not instructions), but does not mention idempotency, safety, authentication, or rate limits. The absence of such context limits transparency.
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 four sentences with no redundant words. It front-loads the purpose, provides an example, explains key parameters, and clarifies query handling. Every sentence adds value.
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 4 parameters and an output schema, the description covers the main purpose and two filter parameters. However, it omits explanation of the 'limit' parameter and any pagination details, which are relevant for an AI agent's effective 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 description coverage is 0%, so the description must compensate. It explains that 'kinds' restricts item types and 'tags' is an AND-filter, adding meaning beyond the schema. However, it does not explain 'query' format or 'limit', leaving gaps.
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 that the tool searches across roles, projects, bullets, and skills, providing an example query. It implicitly distinguishes from sibling tools like list_* and get_* by positioning itself as a search entry point, but does not explicitly contrast with them.
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 notes that this is the 'main entry point' for natural language queries and explains the behavior of the 'kinds' and 'tags' filters. However, it does not provide guidance on when not to use it or suggest alternatives from the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose: assembling resumes, retrieving profile/project/role details, listing bullets/experience/projects/roles/skills, and searching across items. There is no ambiguity between tools.
All tools follow a consistent verb_noun snake_case pattern (e.g., assemble_resume, get_profile, list_roles, search_experience), making the API predictable and easy to navigate.
With 10 tools, the set is well-scoped for a career portfolio server. Each tool serves a necessary function without redundancy, fitting the typical 3-15 range perfectly.
The tool set covers all essential operations for the domain: retrieving profile, roles (flat and grouped), projects, bullets, skills, searching across items, and assembling a resume. There are no obvious gaps for a read-only portfolio server.
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
Talent discovery for AI. Search and read agent-readable candidate profiles; cite by URL.
Career assistant: resumes, job-match analysis, interview results and career memory.
Find public career guides, explore grounded occupations, and open Rung for private resume work.
Public portfolio MCP for resume, services, availability, project evidence, and introductions.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceExposes a public, read-only professional profile with tools to search resume evidence, fetch curated links, and generate career briefs for LLM agents.MIT
- AlicenseNot gradedqualityCmaintenanceExposes a structured professional resume as a set of AI-queryable tools, enabling AI clients like Claude Desktop to query summary, experience, skills, projects, and tailor resumes to job descriptions.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables recruiters to query a person's career, projects, and impact using natural language, acting as a living resume.
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to query the author's career, projects, publications, and technical documents through read-only MCP tools.
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/nima-karami/nima-career-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server