mcpField
F
Frank Goortani CV MCP Server

Frank Goortani CV MCP Server

本地服务
github.com/FrankGoortani商业与营销075 周前更新

关于 Frank Goortani CV MCP Server

Frank Goortani CV MCP Server 将 Frank Goortani 的履历资料以结构化工具和 Markdown 资源提供给 AI 助手及兼容 MCP 的应用,支持检索和按公司筛选经历。

主要功能

  1. 01读取个人资料、技能与兴趣
  2. 02获取完整 Markdown 履历
  3. 03搜索履历文本
  4. 04按公司筛选工作经历
  5. 05获取简历和头像链接

适用场景

  1. 01查询 Frank Goortani 的技能与职业背景
  2. 02查找特定公司的工作经历
  3. 03在兼容应用中读取完整履历

MCP 相关

该 MCP 服务通过工具和 `cv://frankgoortani` 资源向客户端提供履历信息,支持 stdio 和 HTTP 通信。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Frank Goortani CV MCP 服务

许可证:MIT TypeScript FastMCP Cloudflare Workers

这是一个专为提供 Frank Goortani 的简历信息而设计的模型上下文协议(MCP)服务。该服务提供对简历数据的结构化访问,使 AI 助手和其他兼容 MCP 的客户端能够以标准化格式检索、搜索和呈现专业信息。

项目概览

目的

本项目实现了一个 MCP 服务,通过标准化接口公开 Frank Goortani 的履历信息。该服务允许 AI 助手和兼容 MCP 的应用访问结构化的简历数据,包括个人职业资料、技能、工作经验等。

架构概览

本项目基于 FastMCP 框架构建,并遵循模型上下文协议规范。它采用模块化架构设计:

  • 核心模块:包含数据结构、工具实现和资源定义
  • 服务模块:提供用于 stdio 和 HTTP 通信的传输处理程序
  • 部署:配置为可无缝部署到 Cloudflare Workers
graph TD
    LLM[LLM Systems] -->|MCP Protocol| API[CV MCP API]
    API -->|Tools| CV[CV Data]
    API -->|Resource| MD[CV Markdown]

    subgraph "Frank Goortani CV MCP Server"
        API
        subgraph "Data Sources"
            CV
            MD
        end
    end

    API -->|Deployment| CFW[Cloudflare Workers]
主要功能
  • 简历数据访问:结构化访问个人资料、技能、兴趣和工作经验
  • Markdown 资源:以 Markdown 资源形式提供完整简历
  • 搜索功能:搜索简历所有章节中的文本
  • 公司经验筛选:定向检索特定公司的工作经验
  • 媒体访问:提供简历 PDF 和个人照片的直接链接
  • 可部署:已配置为可部署到 Cloudflare Workers
  • 双传输方式:支持 stdio(本地)和 HTTP(远程)通信

资源和工具

可用资源
URI描述类型
cv://frankgoortaniFrank Goortani 的完整 Markdown 格式简历text/markdown
可用工具
get_profile

返回 Frank Goortani 的个人资料信息,包括姓名、职位和职业介绍。

  • 参数:无
  • 返回:包含个人资料信息的 JSON 对象

示例:

// Request
const result = await client.callTool("get_profile", {});

// Response
{
  "name": "Frank Goortani",
  "title": "Hands on Solution Architect | LLM, Web, Cloud, Mobile, Strategy",
  "certifications": ["TOGAF", "PMP"],
  "email": "[email protected]",
  "description": "Visionary technology executive and AI leader with over 25 years of experience..."
}
get_skills

返回 Frank Goortani 的专业技能列表。

  • 参数:无
  • 返回:技能 JSON 数组

示例:

// Request
const result = await client.callTool("get_skills", {});

// Response
[
  "Distributed Systems, API platforms, Microservices, integrations, Workflow systems",
  "Generative AI, Large Language Models (LLMs), AI agents, AI automation, Machine Learning",
  "Reactive and Functional Programming in Go, Python, Java, Swift, Typescript and JavaScript",
  // ...additional skills
]
get_interests

返回 Frank Goortani 的职业兴趣列表。

  • 参数:无
  • 返回:兴趣 JSON 数组

示例:

// Request
const result = await client.callTool("get_interests", {});

// Response
[
  "Startups", "GoLang", "Python", "Typescript", "LangChain", "LLMs", "Microservices", "MCPs"
]
search_cv

在简历中搜索特定词语,并返回匹配的章节。

  • 参数:
    • query(字符串):要在简历中查找的搜索词
  • 返回:包含匹配章节的 JSON 对象

示例:

// Request
const result = await client.callTool("search_cv", {
  query: "generative ai"
});

// Response
{
  "matches": [
    {
      "section": "profile",
      "content": "Visionary technology executive and AI leader with over 25 years of experience driving strategic innovation in generative AI..."
    },
    {
      "section": "skills",
      "content": "Generative AI, Large Language Models (LLMs), AI agents, AI automation, Machine Learning"
    }
    // ...additional matches
  ]
}
get_company_experience

检索在特定公司的工作经验。

  • 参数:
    • company(字符串):要检索其工作经验的公司名称
  • 返回:包含匹配工作经验的 JSON 对象。如果没有找到,则抛出 UserError。

示例:

// Request
const result = await client.callTool("get_company_experience", {
  company: "Uber"
});

// Response
{
  "experiences": [
    {
      "company": "Uber",
      "period": "2021-now",
      "title": "Solution Architect",
      "highlights": [
        "Worked on UDE (User Data Extraction) and DSAR (Data Subject Access Request) Automation...",
        // ...additional highlights
      ]
    }
  ]
}
get_resume_link

返回 Frank Goortani 的简历 PDF 链接。

  • 参数:无
  • 返回:包含简历 URL 的 JSON 对象

示例:

// Request
const result = await client.callTool("get_resume_link", {});

// Response
{
  "resumeLink": "media/Frank Goortani Resume--solution-architect-2024.pdf"
}
get_profile_picture

返回 Frank Goortani 的个人照片链接。

  • 参数:无
  • 返回:包含个人照片 URL 的 JSON 对象

示例:

// Request
const result = await client.callTool("get_profile_picture", {});

// Response
{
  "pictureLink": "media/frankgoortani.png"
}

部署说明

前置条件
本地开发
  1. 克隆仓库

    git clone <repository-url>
    cd cv-mcp
    
  2. 安装依赖

    # Using Bun (recommended)
    bun install
    # OR using npm
    npm install
    
  3. 使用 stdio 传输方式在本地启动服务(适用于命令行工具)

    # Using Bun
    bun start
    # OR using npm
    npm start
    
  4. 使用 HTTP 传输方式在本地启动服务(适用于 Web 应用)

    # Using Bun
    bun run start:http
    # OR using npm
    npm run start:http
    
  5. 开发时启用自动重新加载

    # Using Bun with stdio transport
    bun run dev
    # Using Bun with HTTP transport
    bun run dev:http
    
Cloudflare 部署
  1. 登录 Cloudflare 账户

    wrangler login
    
  2. 根据需要更新 wrangler.toml

    配置已在 wrangler.toml 文件中设置完成。你可能需要自定义以下内容:

    • 自定义域名路由
    • 环境变量
    • KV 命名空间连接
  3. 部署到 Cloudflare

    # Deploy to production
    npm run deploy
    
    # OR deploy to development environment
    npm run deploy:dev
    
  4. 在本地测试 Cloudflare Worker

    npm run dev:cf
    
环境配置

项目使用以下可配置的环境变量:

  • PORT:本地开发的 HTTP 端口(默认值:3001)
  • HOST:HTTP 服务的主机绑定地址(默认值:0.0.0.0)
  • ENVIRONMENT:当前环境(development/production)
  • API_KEY:所有请求都必须在 x-api-key 标头中提供的 API 密钥
  • REQUEST_TIMEOUT:最长请求时长,单位为毫秒(默认值:120000)
  • PING_INTERVAL:Ping 消息之间的间隔,单位为毫秒(默认值:60000)

在 Cloudflare 中,这些变量配置于 wrangler.toml 文件中:

[vars]
ENVIRONMENT = "production"

[env.dev.vars]
ENVIRONMENT = "development"

使用示例

连接到服务
从命令行 MCP 客户端连接
# Connect via stdio transport
npx fastmcp dev "bun run start"

# Connect via HTTP transport
npx fastmcp connect http://localhost:3001/sse -H "x-api-key:<your-api-key>"

请将 <your-api-key> 替换为 API_KEY 环境变量的值。

从 Cursor 连接
  1. 打开 Cursor 并进入设置
  2. 点击左侧边栏中的“Features”
  3. 向下滚动到“MCP Servers”部分
  4. 点击“Add new MCP server”
  5. 输入以下详细信息:
    • 服务名称:frank-cv-mcp
    • 对于 stdio 模式:
      • 类型:command
      • 命令:bun run start
    • 对于 SSE 模式:
      • 类型:url
      • URL:http://localhost:3001/sse
  6. 点击“Save”
在 Cursor 中使用 mcp.json
{
  "mcpServers": {
    "frank-cv-stdio": {
      "command": "bun",
      "args": ["run", "start"],
      "env": {
        "NODE_ENV": "development"
      }
    },
    "frank-cv-sse": {
      "url": "http://localhost:3001/sse"
    }
  }
}
请求流程示例
获取基本信息
// Get profile information
const profile = await client.callTool("get_profile", {});

// Get skills list
const skills = await client.callTool("get_skills", {});

// Get the CV as a markdown document
const cvMarkdown = await client.accessResource("cv://frankgoortani");
搜索特定经历
// Search for AI experience
const aiExperience = await client.callTool("search_cv", {
  query: "ai"
});

// Get specific company experience
const uberExperience = await client.callTool("get_company_experience", {
  company: "Uber"
});
获取媒体链接
// Get resume PDF link
const resumeLink = await client.callTool("get_resume_link", {});

// Get profile picture link
const pictureLink = await client.callTool("get_profile_picture", {});

使用 Docker 运行

本项目可以在 Docker 容器中运行,适用于部署到 Synology NAS 等平台或其他容器编排系统。

前提条件
  • 系统中已安装 Docker。
构建 Docker 镜像
  1. 进入项目根目录(即 Dockerfile 所在目录)。

  2. 运行以下命令构建 Docker 镜像。如有需要,可将 cv-mcp 替换为你想要的镜像名称。

    docker build -t cv-mcp .
    
运行 Docker 容器
  1. 构建镜像后,即可将其作为容器运行。容器中的应用会监听 3001 端口。你需要将主机上的某个端口映射到容器的 3001 端口。

    docker run -d -p 8080:3001 --name cv-mcp-container cv-mcp
    
    • -d:以分离模式(后台)运行容器。
    • -p 8080:3001:将主机上的 8080 端口映射到容器内的 3001 端口。你可以将 8080 更改为主机上任何可用的端口。
    • --name cv-mcp-container:为运行中的容器指定名称,便于管理。
    • cv-mcp:指定要运行的镜像。
  2. 运行容器后,即可访问 MCP 服务。如果映射了主机的 8080 端口,SSE 端点通常为 http://localhost:8080/sse。

  3. 在 Synology NAS 上部署时,通常可使用 Synology Docker UI 或命令行运行容器,并映射相应的主机端口。通过反向代理访问服务的目标 URL 为 https://mcp.goortani.synology.me/。请确保反向代理已配置为将请求转发到映射的主机端口(例如 8080)。

停止并移除容器
  • 停止容器:
    docker stop cv-mcp-container
    
  • 移除容器(停止后):
    docker rm cv-mcp-container
    

许可证

本项目采用 MIT 许可证。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。