LinkedIn MCP工作匹配器(HTTP)
Web 服务 在 快速API que:
- 收到职位描述(学历,要求,可取,经验时间,意见)
- 关於 数据集 (CSV/JSON/TXT)com的URL在LinkedIn上的表现
- 美国嗯 MCP服务器 (LinkedIn MCP) 收集个人资料数据
- 计算到 粘性 并介绍 前5名 候选人
界面web simples(PicoCSS)+端点 POST /analyze.
______________________________________________________________________
1) 要求
- 码头工人 ≥ 24
- Docker Compose 第2版
- 访问一个 MCP服务器HTTP 旋转和曝光:
- GET /mcp 准握手(流式HTTP do MCP) - 乌玛 工具 (默认 : linkedin.fetch_profile)什么油 { "url": " " }
- (可选)
make对于快捷键
⚠️ 服务 没有登录 在LinkedIn上。MCP 服务器必须负责任何必要的身份验证,并从配置文件中返回结构化数据。
______________________________________________________________________
2)项目结构(建议)
project-root/
├─ app/
│ ├─ main.py # FastAPI app
│ ├─ linkedin_mcp.py # Cliente MCP (streamable HTTP)
│ ├─ scoring.py # Regras de pontuação
│ ├─ templates/
│ │ ├─ index.html
│ │ └─ results.html
│ └─ static/
│ └─ ... # (opcional)
├─ Dockerfile
├─ docker-compose.yml
├─ .env # variáveis de ambiente
└─ README.md______________________________________________________________________
(3)环境变量(.env)
创建文件 .env Raiz com:
# Porta pública do app FastAPI
APP_PORT=8000
# Conexão com o MCP Server (modo HTTP streamable)
MCP_HOST=host.docker.internal # dentro do container, aponta para máquina host (ajuste se necessário)
MCP_PORT=8080 # porta onde o MCP Server está ouvindo
MCP_PATH=/mcp # path do endpoint HTTP do MCP
# Nome da tool exposta pelo MCP para buscar o perfil:
MCP_PROFILE_TOOL=linkedin.fetch_profile
# Concorrência e timeout das chamadas ao MCP
MCP_CONCURRENCY=3
FETCH_TIMEOUT_S=60智利host.docker.internal可能不存在。如果 MCP 在主机上运行,请使用主机的 IP 地址(例如:172.17.0.1)或者通过编辑使两者都工作/etc/hosts.\ 提示( 在共享网络中共享) : 如果 MCP 是 在另一个 docker-compose 服务中 (例如:mcp) 你可以使用MCP_HOST=mcpe `MCP_PORT=
`.
______________________________________________________________________
4) Dockerfile
示例 Dockerfile 最小值 :
FROM python:3.11-slim
WORKDIR /app
# Sistema
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential curl && \
rm -rf /var/lib/apt/lists/*
# Dependências Python
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Código
COPY app ./app
# Porta interna do Uvicorn
EXPOSE 8000
# Entrypoint
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--proxy-headers"]确保你有一个requirements.txt内容(例子): ``fastapi==0.115.0 uvicorn[standard]==0.30.6 jinja2==3.1.4 python-dotenv==1.0.1 httpx==0.27.2 anyio==4.6.2 mcp[cli]==1.12.0`` (版本可能会有所不同,请与您的代码保持兼容。
______________________________________________________________________
5) docker-compose.yml
例如 只 应用程序(假设MCP已经在外部运行或在另一个组件中运行):
services:
job-matcher-app:
build:
context: .
dockerfile: Dockerfile
container_name: job-matcher-app
env_file:
- .env
ports:
- "${APP_PORT}:8000"
restart: unless-stopped如果你 也 要将 MCP 服务器编排到此组合中,请添加一个服务mcp并指出MCP_HOST=mcp例子(说明): ``yaml services: mcp: image: seu-registro/linkedIn-mcp:latest ports: - "8080:8080" environment: - SOME_AUTH_TOKEN=... job-matcher-app: build: . env_file: .env environment: - MCP_HOST=mcp - MCP_PORT=8080 depends_on: - mcp ports: - "${APP_PORT}:8000"``
______________________________________________________________________
6) 构建与运行
# 1) Build
docker compose build
# 2) Subir
docker compose up -d
# 3) Logs (opcional)
docker compose logs -f job-matcher-app访问 :\ http://localhost:8000 (ou http://:${APP_PORT})
健康检查快速:
curl http://localhost:8000/health || true______________________________________________________________________
7) Uso通过界面Web
- 阿布拉
http://localhost:8000 - Preencha:
- 学历要求 (例如: Bachelor, Master, High School) - 所需技能 (例如: Python, FastAPI, Docker) - 所需技能 (例如: AWS, GitHub Actions) - 最少年工作经验 (例如: 3) - 备注 (可选)
- 上传do数据集
- CSV 带头 linkedin_url 哦 url - JSON COM对象数组 linkedin_url 哦 url - 文本 每行 URL
- 发送。页面
results它将显示:
- 已处理多少个配置文件 - 前5名候选人 - 分数组成部分(required/desired/education/experience/keywords/penalty) - (可选) 块 `` 如果某个配置文件失败,则会出现错误
______________________________________________________________________
8)使用您的cURL(直接端点)
curl -F "education_required=Bachelor" \
-F "required_skills=Python,FastAPI,Docker" \
-F "desired_skills=AWS,GitHub Actions" \
-F "min_years_experience=3" \
-F "notes=We value clean code." \
-F "dataset=@/caminho/para/dataset.csv" \
http://localhost:8000/analyze______________________________________________________________________
9) 数据集格式
CSV(推荐)
linkedin_url
https://www.linkedin.com/in/fulano/
https://www.linkedin.com/in/ciclano/哦
url
https://www.linkedin.com/in/fulano/
https://www.linkedin.com/in/ciclano/JSON
[
{"linkedin_url": "https://www.linkedin.com/in/fulano/"},
{"url": "https://www.linkedin.com/in/ciclano/"}
]文本
https://www.linkedin.com/in/fulano/
https://www.linkedin.com/in/ciclano/后端仅删除并保留包含以下内容的 URL "linkedin.com".______________________________________________________________________
10)有用的设置
- 竞争 (并行分析的最大配置文件数):
- MCP_CONCURRENCY (标准: 3)
- 超时 每次调用 MCP:
- FETCH_TIMEOUT_S 以秒为单位(默认:60)
- MCP工具:
- MCP_PROFILE_TOOL (默认 : linkedin.fetch_profile)
- 端点MCP:
- MCP_HOST, MCP_PORT, MCP_PATH
其他 .env e 重新启动 服务:
docker compose up -d --build______________________________________________________________________
(1)故障排除(Troubleshooting)
11.1“无法分析个人资料。”无卡片
- MCP 可能已失败、过期或 URL 无效
- 看看块 `
在页面顶部results` (未启用模板) - 查看应用程序日志:
docker compose logs -f job-matcher-app11.2 错误 anyio / TaskGroup /“试图退出取消作用域…”
- 当 HTTP MCP 会话在创建它的任务之外关闭时发生这种情况。
- 实施建议 每通话会话 (
async with streamablehttp_client(...))以减轻。 - 持久性:
- 保证 mcp[cli] 已更新(mcp[cli]>=1.12.0) - Reduza MCP_CONCURRENCY - 增大 FETCH_TIMEOUT_S
11.3“无法发送请求,因为客户端已关闭。”
- 指示在发送前关闭 MCP 上的 HTTPX 客户端。
- 检查 MCP 服务器 和 连接
MCP_HOST/MCP_PORT/MCP_PATH. - 测试连接 从内部 做容器:
docker exec -it job-matcher-app sh
# dentro do container:
apt-get update && apt-get install -y curl || true
curl -v http://$MCP_HOST:$MCP_PORT$MCP_PATH11.4 所有分数 0%
- 确认 MCP 是否返回结构化数据(技能、经验、教育)。
- 检查
MCP_PROFILE_TOOL. - 修订
linkedin_mcp.py(标准化)和scoring.py(规则和规则)
11.5“TypeError:未定义不定义 __轮次__”
- O模板美国
|round(1). - 后端必须始终发送数字
_safe_components(). - 如果您更改了模板,请使用
|default(0)|float|round(1).
11.6 在主机 (Linux) 上访问 MCP
host.docker.internal可能无法解决。- 使用 bridge docker 的 IP 位置 (例如 :
172.17.0.1(或调整)/etc/hosts.
______________________________________________________________________
12) 开发 & 热重载 (可选)
Rodar本地com热重载:
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000______________________________________________________________________
13) 停止和删除
docker compose down
# Para remover imagens (cuidado):
# docker compose down --rmi all --volumes --remove-orphans______________________________________________________________________
14) 许可证
在此设定您工程的许可证( MIT、 Apache-2.0 等) 。
