Skip to main content
Glama
garusis

Hire-me MCP

by garusis

hire-me-mcp

hire-me-mcp — это портфолио Marcos Alvarez, переработанное в живой, доступный через API ресурс: публичный анонимный Model Context Protocol (MCP) сервер и сайт на Next.js, которые оба читают одни и те же реальные данные карьеры. Любому ИИ-ассистенту это резюме можно передать как инструмент и получать ответы с цитатами и обоснованиями, а не догадки — без API-ключа, без регистрации, один URL для подключения.

CI Latest release Deployed on Vercel

Запись терминала реальной MCP-сессии: подключение к живому эндпоинту hire-me-mcp, вывод списка его инструментов, затем вызов get-skill-evidence с «event-driven architecture» и получение цитируемого обоснованного ответа, указывающего на конкретную запись из истории работы.

  • Живой сайт: https://hire-me-mcp-web.vercel.app

  • Скачиваемое резюме (PDF): генерируется напрямую из packages/career-data — тот же источник, тот же доменный слой, без отдельно поддерживаемой копии. Ссылка есть в шапке сайта («Download CV») и в разделе Site файла /llms.txt; стабильный путь для скачивания — /cv/<slugified-name>-cv.pdf на указанном выше живом сайте. Перегенерируйте его при любом изменении контента командой pnpm generate:cv и закоммитьте результат (приложенный PDF поставляется с каждым деплоем — собственная сборка Vercel собирает и разворачивает только Next.js-приложение, поэтому генерация PDF в неё намеренно не встроена). Готовый к печати HTML-просмотр того же контента доступен по адресу /cv/print.

  • Документация для ИИ-агентов: docs/mcp.md (все клиенты, лимиты запросов и устранение неполадок) и собственная точка входа /llms.txt на сайте.

  • Чек-лист безопасности: публикуется вместе с этим запуском в #57 — ссылка появится здесь после объединения docs/security-checklist.md.

  • Живой MCP-эндпоинт (Streamable HTTP, без аутентификации):

https://hire-me-mcp-web.vercel.app/api/mcp

Попробуйте за 30 секунд

Никаких API-ключей, ни OAuth, ни аккаунта. Любой клиент, поддерживающий транспорт MCP Streamable HTTP, может подключиться, вставив указанный выше URL в поле «remote server» / «custom connector».

Claude Code (CLI):

claude mcp add --transport http hire-me-mcp https://hire-me-mcp-web.vercel.app/api/mcp

Cursor / VS Code (.cursor/mcp.json или .vscode/mcp.json):

{
  "mcpServers": {
    "hire-me-mcp": {
      "url": "https://hire-me-mcp-web.vercel.app/api/mcp"
    }
  }
}

Процесс подключения через custom-connector в Claude web/desktop, сырая curl-проверка здоровья, лимиты запросов и устранение неполадок — всё это в docs/mcp.md — каноническом руководстве по подключению. Каждый фрагмент выше генерируется из того же модуля метаданных подключения, из которого читает это руководство (packages/connect-metadata, через pnpm generate:connect), так что он никогда не может разойтись с тем, что сервер реально отдаёт.

Related MCP server: Developer Portfolio MCP Server

Что у него можно спросить

Ответ каждого инструмента содержит ссылку на конкретную запись профиля, роль или проект, из которых он взят, — обоснованные ответы, а не догадки.

  • «Кто такой Marcos Alvarez и открыт ли он сейчас к новым ролям?»

  • «Над чем Marcos работал с 2022 года? Проведи меня по его последним ролям.»

  • «Покажи проекты, где Marcos использовал TypeScript или Kubernetes.»

  • «Работал ли Marcos с событийно-ориентированными архитектурами? Покажи доказательства.»

  • «Какой у Marcos опыт руководства инженерными командами и менторства?»

Инструмент

Что отвечает

Пример вопроса

get-profile

Возвращает единственную запись профиля Маркоса Альвареса — имя, заголовок, местоположение, доступность и краткую биографию — одним объектом, с подтверждающими цитатами. Используйте это, чтобы быстро ответить на вопрос «кто этот человек» или «какова его текущая доступность/местоположение». Не используйте для послужной истории по ролям (используйте get-experience), для конкретных деталей проектов (используйте search-projects) или для проверки, заявлен ли конкретный навык или технология (используйте get-skill-evidence). Не принимает входных данных. В обычной работе нет исхода «нет результата» — в наборе данных этого сервера всегда ровно один профиль.

«Кто такой Маркос Альварес, и открыт ли он сейчас для новых ролей?»

get-experience

Возвращает каждую запись из истории работы Маркоса Альвареса, соответствующую необязательному структурированному фильтру — компания, теги технологий, диапазон дат ГГГГ-ММ и статус текущий/прошлый — в виде списка, упорядоченного от самых новых к старым, каждая запись с цитатой. Используйте это, чтобы ответить на вопросы «что он делал в компании X», «над чем он работал в году Y» или «чем он занимается сейчас». При вызове без полей фильтра возвращается полная история. Не используйте для краткого профиля (используйте get-profile), для поиска по ключевым словам в описаниях проектов (используйте search-projects) или для проверки, заявлен ли один именованный навык (используйте get-skill-evidence). Фильтр, не соответствующий ни одной роли, возвращает успешный результат с пустым списком, а не ошибку.

«Над чем Маркос работал с 2022 года? Проведите меня по его последним ролям.»

search-projects

Ищет в портфолио проектов Маркоса Альвареса по ключевому слову и/или тегу технологии и возвращает ранжированные совпадения, каждое с оценкой релевантности, объяснением совпавшего поля и цитатой. Сопоставление — это детерминированный поиск по ключевым словам/тегам по названиям проектов, резюме, текстам и тегам технологий — на сегодня нет семантического или основанного на эмбеддингах понимания запроса. Используйте это, когда просят найти или описать конкретные проекты, например «покажи проекты, где использовался React» или «что он построил с Kubernetes». Не используйте для хронологической истории работы (используйте get-experience) или для проверки, заявлен ли навык вообще, с доказательствами или пробелом (используйте get-skill-evidence). Запрос, не соответствующий ни одному проекту, возвращает успешный результат с пустым списком, а не ошибку; пустой запрос или запрос только из пробелов ведёт себя так же.

«Покажи проекты, где Маркос использовал TypeScript или Kubernetes.»

get-skill-evidence

Ищет один именованный навык или технологию и сообщает один из трёх честных исходов: 'claimed' (навык с подтверждающими доказательствами), 'not-claimed' (явный, признанный пробел с собственным заявлением и связанными навыками) или 'unknown' (термин не соответствует ни тому, ни другому). Используйте это, когда спрашивают «знаете ли вы X» или «работали ли вы с Y» об одной конкретной технологии. Не используйте для просмотра полного списка навыков (в этом сервере нет такого инструмента) или для поиска ключевого слова в описаниях проектов (вместо этого используйте search-projects), и это не замена get-experience, когда вопрос касается роли или компании, а не одного навыка. Результат 'not-claimed' или 'unknown' — это нормальный, успешный ответ, а не ошибка — передайте его честно, а не повторяйте попытки или не галлюцинируйте вокруг него.

«Работал ли Маркос с событийно-ориентированными архитектурами? Покажите доказательства.»

search-career

Выполняет нечёткий семантический поиск по полному тексту карьерного контента Маркоса Альвареса (опыт, проекты, навыки, публикации) и возвращает ранжированные выдержки, каждая с оценкой релевантности и цитатой, или явный результат «релевантный контент не найден», когда ничего не превышает порог сходства. Используйте это для открытых, сквозных или концептуальных вопросов, на которые структурированный поиск не может ответить напрямую — например, «работал ли он с событийно-ориентированными архитектурами», «каков его опыт руководства командами», «что-нибудь об оптимизации затрат». Не используйте, когда вопрос сводится к конкретному структурированному поиску, на который детерминированные инструменты уже отвечают точно: get-profile для того, кто он, get-experience для истории работы по роли/компании/диапазону дат, search-projects для поиска проектов по ключевым словам/тегам и get-skill-evidence для проверки одного конкретного именованного навыка или технологии — сначала предпочитайте их и обращайтесь к этому инструменту только если они не подходят. Этот инструмент дороже за вызов (он встраивает запрос) и подчиняется тому же дороже за вызов (он встраивает запрос) и подчиняется тому же общесерверному ограничению скорости, что и любой другой инструмент здесь — не вызывайте его повторно для одного и того же вопроса.

«Каков опыт Маркоса в руководстве инженерными командами и наставничестве?»

(Шестой инструмент, ping, существует исключительно как диагностика подключения.)

Карта архитектуры

Монорепозиторий на pnpm + Turborepo. Node >= 22 (CI и Vercel работают на 24), pnpm 10 (закреплён через packageManager).

apps/
  web/                  Next.js 15 App Router app — the site, the chat widget, and the public MCP endpoint (app/api/mcp/route.ts)
packages/
  core/                 Framework-free domain layer (search, citations) — consumed by apps/web
  career-data/          Zod-typed career content (profile, experience, projects, skills) — the single source of truth
  agent/                Mastra-based interview chat agent (grounded RAG over packages/career-data) + eval suite
  connect-metadata/     Typed MCP connection metadata, per-client snippet renderers, and the generated-region injector (#17)
tooling/
  tdd-guard/             Source<->test path mapping and TDD allow/block decision logic, used by .claude/hooks

apps/web зависит от packages/* выше через протокол workspace:* — никогда не относительные импорты ../../packages/... или хаки с путями в tsconfig. packages/core и packages/career-data остаются без фреймворков, поскольку они также напрямую поддерживают публичную конечную точку MCP. Все пакеты расширяют общий tsconfig.base.json (strict: true).

Локальная разработка

Предварительные требования: Node >= 22, pnpm 10 (corepack enable автоматически подхватывает закреплённую версию).

pnpm install              # install all workspace dependencies + git hooks (lefthook)
pnpm dev                  # turbo run dev — runs all dev servers (site at http://localhost:3000)
pnpm turbo lint typecheck test build   # the canonical pipeline — same one CI and the Stop hook run

Требуемые переменные окружения (только имена — см. .env.example для полного обоснования и того, где каждая используется; реальные значения никогда не коммитятся):

Переменная

Назначение

SITE_URL

Необязательное переопределение собственного абсолютного origin сайта. Не требуется — Vercel определяет его автоматически.

UPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN

Учётные данные Upstash Redis, обеспечивающие ограничение частоты запросов /api/mcp. Если не заданы, сервис работает без ограничений (fail open), а не завершается ошибкой.

RATELIMIT_MAX_REQUESTS, RATELIMIT_WINDOW_SECONDS

Переопределяют окно ограничения частоты запросов конечной точки MCP.

CHAT_PROVIDER, CHAT_MODEL_ID

Выбирают и фиксируют провайдера/идентификатор модели чат-агента.

GOOGLE_GENERATIVE_AI_API_KEY

Требуется, когда CHAT_PROVIDER=google (значение по умолчанию).

ANTHROPIC_API_KEY

Требуется только когда CHAT_PROVIDER=anthropic.

CHAT_SESSION_RATELIMIT_MAX_REQUESTS, CHAT_SESSION_RATELIMIT_WINDOW_SECONDS, CHAT_IP_RATELIMIT_MAX_REQUESTS, CHAT_IP_RATELIMIT_WINDOW_SECONDS, CHAT_AGENT_MAX_STEPS

Настройка защитных ограничений чата — см. apps/web/README.md «Chat guardrails».

DATABASE_URL

Строка подключения Neon Postgres для модуля @hire-me-mcp/core/db (миграции, приём данных, searchCareer). См. packages/core/README.md.

NEON_API_KEY, NEON_PROJECT_ID

Создание/удаление временной ветки Neon только для набора интеграционных тестов БД — никогда не используется с основной базой данных.

Ни одна из них не требуется для успешного прохождения pnpm turbo lint typecheck test build в чистом клоне.

pnpm lint                 # turbo run lint — Biome, the only linter/formatter in this repo
pnpm typecheck             # turbo run typecheck — strict TypeScript everywhere
pnpm test                  # turbo run test — Vitest, co-located *.test.ts(x) next to source
pnpm build                 # turbo run build — builds all packages in dependency order
pnpm test:e2e               # Playwright smoke test against a production build
pnpm test:mcp               # protocol-level MCP integration suite (real SDK client, real server process)
pnpm eval:agent              # chat agent groundedness/gap-honesty/relevance evals
pnpm eval:retrieval          # searchCareer recall@k/precision@k/MRR golden-dataset eval
pnpm generate:connect:check  # verify the generated regions above are up to date with the real tool registry

Полная механика тестовой пирамиды (preview e2e, Lighthouse, pre-commit хуки, CI-задачи, защита веток), а также способ воспроизведения развёртывания Vercel локально описаны в docs/development.md и docs/deployment.md — в этом разделе перечислены только команды, а не «почему».

Подробнее

  • AGENTS.md — правила для любого кодинг-агента, работающего с этой кодовой базой: разработка через тесты (test-first), канонические команды и три уровня, обеспечивающие и то, и другое.

  • docs/mcp.md — полное руководство по подключению MCP (каждый клиент, ограничения частоты запросов, устранение неполадок), включая раздел «Discovery: machine-readable metadata» о JSON-LD Person, карточках OpenGraph/Twitter для каждого маршрута и /.well-known/mcp.json — а также о том, какие из них определены спецификацией MCP (ни одна, для этого сервера без аутентификации), а какие являются соглашением проекта.

  • /llms.txt — собственная точка входа агента на сайте, для посетителя, которому выдали развёрнутый URL, а не этот репозиторий.

  • Security checklist — разовый проход по безопасности (аудит зависимостей, гигиена секретов, фаззинг входных данных MCP, повторная проверка ограничений частоты запросов) появится в #57; этот раздел будет ссылаться напрямую на docs/security-checklist.md, как только этот PR будет объединён.

  • Issue tracker — дорожная карта, открытые задачи и место, куда сообщать об устаревшем фрагменте кода или ошибке в MCP-сервере.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that provides a structured API for AI agents to query a person's resume, including profile, projects, writing, and gated access to experience and skills.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Turn any data source into an MCP server in 5 minutes. Build knowledge bases that AI assistants like Claude and Cursor can query directly.
    2
    12 npm
    22
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A local MCP server that gives AI agents structured access to a personal Obsidian knowledge vault, with semantic search, organization through Maps of Content, and git-backed history.
    -