Mcp Me — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp Me (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Um servidor MCP (Model Context Protocol) que transforma dados profissionais em ferramentas consumíveis por LLMs. Em vez de um recrutador ler um PDF estático de CV, ele (ou um agente) faz perguntas e recebe dados reais e estruturados em resposta.
Status: Produção | Versão: 1.0.0 | Runtime: Node.js + TypeScript
O mcp-me expõe 4 ferramentas MCP que consultam:
Ideal para:
match_job reporta gaps reais, não infla o perfilget_cvRetorna o CV completo ou uma seção específica.
Entrada:
{
"lang": "en" | "pt-br", // opcional, padrão: "en"
"section": "summary" | "skills" | "experience" | "projects" | "education" | "certifications" | "languages" // opcional
}Saída: Texto Markdown formatado com o CV ou seção solicitada.
Exemplos de uso:
get_cv({ lang: "pt-br" })
→ Retorna CV completo em português
get_cv({ lang: "en", section: "skills" })
→ Retorna apenas a seção de habilidades técnicas em inglês
get_cv({ section: "professional experience" })
→ Match parcial: retorna a seção de experiêncialist_projectsLista projetos com metadados completos: descrição, stack, destaques, URL do repositório, URL da demo e status.
Entrada:
{
"tech": "Next.js" | "Python" | "React" | ... // opcional, case-insensitive, partial match
}Saída: Lista formatada de projetos com campos estruturados.
Status: "completed" | "in-progress" | "active" | "experimental" Categoria: "cv" (em destaque no CV) | "additional" (extras no GitHub)
Exemplos de uso:
list_projects()
→ Lista todos os 8+ projetos
list_projects({ tech: "next" })
→ Filtra projetos com Next.js, retorna 2-3 resultados
list_projects({ tech: "python" })
→ Filtra projetos com Python, retorna projetos de IA/dadosmatch_jobAnalisa o fit entre o perfil e uma descrição de vaga. Retorna:
Entrada:
{
"description": "Fullstack Engineer needed for Next.js/React + Python FastAPI microservices..."
}Saída: Análise estruturada com score, skills matching, gaps e pitch.
Score interpretation:
Exemplos:
match_job({ description: "React + TypeScript + Node.js backend engineer needed..." })
→ Score: 92, Matching Skills: React, TypeScript, Node.js, ...
→ Gaps: (nenhum), Suggested Pitch: Strong fit...
match_job({ description: "Lead Golang architect, 10 years Go experience required..." })
→ Score: 15, Matching Skills: (nenhum), Gaps: Go, Kubernetes orchestration, ...
→ Suggested Pitch: Limited overlap, significant career pivot...ask_about_meBusca por palavras-chave em todo o perfil (CV + projetos) e retorna os 10 trechos mais relevantes agrupados por seção.
Entrada:
{
"question": "ETL experience?" | "databases usados?" | "tem experiência com IA?" | ...
}Saída: Trechos de experiência agrupados por seção (Professional Experience, Projects, etc.)
Suporta:
Exemplos:
ask_about_me({ question: "ETL experience" })
→ Retorna experiência com pipelines de dados, Airflow, etc.
ask_about_me({ question: "tem experiência com IA?" })
→ Retorna projetos e experience com LLMs, CrewAI, etc.
ask_about_me({ question: "Docker Kubernetes" })
→ Retorna seções sobre DevOps, containerização, orquestração| Componente | Tecnologia |
|---|---|
| Runtime | Node.js 22+ (ES Modules) |
| Linguagem | TypeScript 5.7 |
| Protocolo | MCP SDK @modelcontextprotocol/sdk ^1.12.1 |
| Validação | Zod ^3.25.67 |
| Build | tsup 8.0 |
| Linting | Biome 1.9 |
| Transporte | stdio (comunicação padrão stdin/stdout) |
node --version)# 1. Clone o repositório
git clone https://github.com/fe-m-bueno/mcp-me.git
cd mcp-me
# 2. Instale dependências
npm install
# 3. Build
npm run build
# 4. Verifique a build
ls dist/
# Deve haver: index.js, index.d.ts (sourcemaps), data/ (CVs + projetos)dist/
├── index.js # Entry point compilado
├── index.js.map # Sourcemap
├── index.d.ts # Tipos TypeScript
└── data/
├── cv-en.md # CV em inglês
├── cv-ptbr.md # CV em português
└── projects.json # Dados de projetosConfigure no seu cliente MCP (Claude Desktop, Cline, etc.):
macOS/Linux - `~/.config/Claude/claude_desktop_config.json`:
{
"mcpServers": {
"me": {
"command": "node",
"args": ["/home/felipebueno/Development/mcp-me/dist/index.js"]
}
}
}Windows - `%APPDATA%/Claude/claude_desktop_config.json`:
{
"mcpServers": {
"me": {
"command": "node",
"args": ["C:/Users/felipebueno/Development/mcp-me/dist/index.js"]
}
}
}Após configurar, reinicie o cliente MCP. As 4 ferramentas aparecerão disponíveis.
npm run inspectAbre uma interface web em http://localhost:3000 para testar as tools interativamente.
# Terminal 1: Inicia o servidor
node dist/index.js
# Terminal 2: Conecta via stdio
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}' | node dist/index.jssrc/
├── index.ts # Entry point, stdio transport
├── server.ts # Definição das 4 tools com descrições
├── tools/
│ ├── cv.ts # Handler get_cv
│ ├── projects.ts # Handler list_projects
│ ├── match.ts # Handler match_job
│ └── ask.ts # Handler ask_about_me
├── lib/
│ ├── parser.ts # Parse de Markdown em seções
│ ├── matcher.ts # Lógica de matching vaga ↔ perfil
│ ├── projects.ts # Loading de projects.json
│ ├── response.ts # Utilitários de resposta (ToolResponse)
│ └── paths.ts # Resolução de caminhos de data/
└── data/
├── cv-en.md # CV em inglês
├── cv-ptbr.md # CV em português
└── projects.json # Dados de projetos com metadados# 1. Desenvolva com watch
npm run dev
# 2. Lint em tempo real
npm run lint
npm run lint:fix
# 3. Build final
npm run build
# 4. Teste com Inspector
npm run inspectsrc/tools/new-tool.ts com handler assíncronoserver.ts com server.registerTool()index.ts (já feito automaticamente)npm run inspectExemplo:
// src/tools/new-tool.ts
import { loadCv } from "../lib/parser.js";
import { ToolResponse, textResult } from "../lib/response.js";
export async function newToolHandler(args: {
query: string;
}): Promise<ToolResponse> {
const cv = loadCv("en");
// sua lógica aqui
return textResult("resultado");
}CVs: Copie de ~/Development/cv/ para src/data/cv-*.md
cp ~/Development/cv/cv-en.md src/data/
cp ~/Development/cv/cv-ptbr.md src/data/
npm run buildProjetos: Edite src/data/projects.json diretamente
vim src/data/projects.json
npm run buildNenhuma necessária no momento. Todos os dados são estáticos em src/data/.
O servidor busca dados em src/data/ em tempo de build (resolvido via lib/paths.ts). Durante runtime, os arquivos estão em dist/data/.
tsconfig.json:
biome.json:
CVs e projetos são carregados uma única vez ao iniciar e guardados em cache:
const cvCache = new Map<string, CvData>();
export function loadCv(lang: "en" | "pt-br"): CvData {
const cached = cvCache.get(lang);
if (cached) return cached;
// carrega do disco, cacheia
}TECH_PATTERNS)ask_about_meCertifique-se que você rodou npm run build. O build copia src/data/ para dist/data/.
npm run build
ls dist/data/Verifique se o path absoluto no claude_desktop_config.json está correto:
ls /home/felipebueno/Development/mcp-me/dist/index.js
# Deve existirPorta 3000 pode estar em uso. Mude a porta ou encerre o processo:
lsof -i :3000
kill -9 <PID>
npm run inspectnpm run lint:fixBiome corrige automaticamente problemas de formatting e imports.
Este é um projeto pessoal, mas se quiser melhorias:
git checkout -b feature/meu-feature)git commit -m "Adiciona X")git push origin feature/meu-feature)Felipe Bueno GitHub: @fe-m-bueno Email: [email protected]
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.