mcpField
S
Staffing Math

Staffing Math

远程服务
bensunter.com商业与营销04 天前更新

关于 Staffing Math

Staffing Math 面向规划运营团队及电话、聊天队列人力的人员配置需求。三个工具分别计算所需 FTE、月度招聘计划和 Erlang C 配员,并列出输入、假设及计算步骤供核查。

主要功能

  1. 01计算稳定工作量所需 FTE
  2. 02按需求变化规划月度招聘名额
  3. 03模拟离职、招聘周期和爬坡期
  4. 04用 Erlang C 计算电话或聊天队列人员
  5. 05展示输入、假设和计算步骤
  6. 06显示交互式招聘计划视图

适用场景

  1. 01估算固定工作量所需人力
  2. 02规划月度业务增长对应的招聘
  3. 03纳入离职率和招聘提前期
  4. 04计算达到应答时限目标的队列人力

MCP 相关

它向 MCP 客户端提供 required_fte、hiring_plan 和 erlang_staffing 三种工具。hiring_plan 还提供 MCP Apps 视图,并支持托管或自运行的 HTTP 端点及 stdio。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://staffing-math.vercel.app/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

人员配置计算

一个 MCP 服务,可为 Claude 和 ChatGPT 提供精确的人员配置计算。它包含三个工具:

  • required_fte:计算稳定工作量所需的人数。
  • hiring_plan:在工作量变化时,计算每月需要开放多少招聘职位,并考虑人员流失、招聘周期和上岗爬坡时间。
  • erlang_staffing:计算电话或聊天队列为达到应答时间目标所需的坐席人数(Erlang C)。

模型负责对话,工具负责所有计算,并在给出答案时一并返回:每项输入都会标记为 given 或 assumed,算式中也会填入具体数字。你可以用计算器核对任意答案。

在 Claude 和 ChatGPT 中,hiring_plan 还会以图表呈现答案:按月对比所需 FTE 和现有 FTE,用斜线标出人手不足的月份,并在下方列出要开放的招聘职位。你调整增长率、人员流失率、招聘周期、上岗爬坡时间、非生产时间和人数时,滑块会让服务端重新运行计划,模型也会获知你所做的更改。

计算引擎来自 Operating Model Simulator,原样复制到 vendor/ 中,并包含其自身的测试。

无需安装即可使用:将 https://staffing-math.vercel.app/mcp 添加为连接器。步骤和示例:bensunter.com/staffing-math.html。

示例

我每周处理 4,000 个案例,每个案例需要 12 分钟,非生产时间为 30%。我需要多少人?如果工作量每月增长 5%,招聘计划会是什么样?

required_fte 返回:

Answer: 33.61 FTE, so 34 people.

Inputs
- weekly volume: 4,000 cases (given)
- minutes per case: 12 (given)
- shrinkage: 30% (given)
- target occupancy: 85% (assumed)
- hours per FTE per week: 40 (assumed)

Arithmetic
1. Work per week = 4,000 cases x 12 min / 60 = 800.0 hours
2. Productive hours per FTE = 40 x (1 - 0.3) = 28.00 hours
3. Planned hours per FTE at 85% occupancy = 28.00 x 0.85 = 23.80 hours
4. FTE needed = 800.0 / 23.80 = 33.61
5. People to staff = 33.61 rounded up = 34

Each extra minute per case adds 2.80 FTE.

使用相同输入并设定每月增长 5% 时,hiring_plan 会返回以下答案和表格,以及相同的输入和计算过程:

Answer: open 30 requisitions over 12 months, 4 of them in month 1.
FTE needed goes from 33.61 in month 1 to 57.49 in month 12. Expected leavers over the plan: 0.0.
Requisitions opened in months 11 and 12 are for hires who count in months 13 and 14, assuming the 5% monthly growth continues.
Month 2 is short and new hires can't fix that: the earliest a requisition opened now counts is month 3. Covering it takes overtime, contractors or moving people. People already hired or in the pipeline can count earlier: give them as hires_in_flight.
Attrition was assumed to be 0%. At 15% a year this plan needs 38 requisitions; at 30%, 48. Ask for the team's real rate.
Current headcount was assumed to be exactly what month 1 needs (34), as if the team is fully staffed today. If it has fewer people, give current_headcount.
月份每周工作量所需 FTE要开放的招聘职位计入人数预计离职人数现有 FTE富余 (+) / 短缺 (-)
第 1 个月4,00033.61400.0034.00+0.39
第 2 个月4,20035.29100.0034.00-1.29
第 3 个月4,41037.06240.0038.00+0.94
第 4 个月4,63138.91210.0039.00+0.09
第 5 个月4,86240.86320.0041.00+0.14
第 6 个月5,10542.90220.0043.00+0.10
第 7 个月5,36045.05230.0046.00+0.95
第 8 个月5,62847.30320.0048.00+0.70
第 9 个月5,91049.66220.0050.00+0.34
第 10 个月6,20552.15330.0053.00+0.85
第 11 个月6,51654.75320.0055.00+0.25
第 12 个月6,84157.49330.0058.00+0.51

提示词没有提供目标占用率、每周工时、当前人数、人员流失率、招聘周期或上岗爬坡时间,因此工具使用默认值,并将每项都列为 assumed。人员流失率和人数对答案影响最大,因此结果会特别说明这两项,并同时给出人员流失率为 15% 和 30% 时的计划。Claude 会被告知这一点,并主动提出使用实际数字重新计算。若目前有 30 人、年人员流失率为 25%,且上岗爬坡需要一个月,同一份预测需要开放 53 个招聘职位,而不是 30 个;其中 12 个在第 1 个月开放,并且在任何新员工计入之前,第 1 至第 3 个月都会人手不足。

手动核算:第 12 个月的工作量为 4,000 x 1.05^11 = 每周 6,841 个案例。也就是 6,841 x 12 / 60 = 1,368 小时,而 1,368 / 23.80 = 57.49 FTE。

安装

该服务只有一个文件 dist/staffing-math.mjs,需要 Node 18 或更高版本。先克隆仓库:

git clone https://github.com/bsunter93/staffing-math.git
Claude Desktop

打开“设置”,然后依次进入“开发者”和“编辑配置”,将服务添加到 claude_desktop_config.json。使用克隆仓库的完整路径:

{
  "mcpServers": {
    "staffing-math": {
      "command": "node",
      "args": ["/full/path/to/staffing-math/dist/staffing-math.mjs"]
    }
  }
}

重新启动 Claude Desktop。在新聊天中,三个工具会显示在工具菜单下。

若要将其安装为 Desktop 扩展,则运行 npm run pack,然后双击生成的 staffing-math.mcpb。

Claude Code

在 Claude Code 中将其作为插件使用:

/plugin marketplace add bsunter93/staffing-math
/plugin install staffing-math@staffing-math

或者将其作为普通 MCP 服务使用:

claude mcp add staffing-math -- node /full/path/to/staffing-math/dist/staffing-math.mjs
Gemini CLI
gemini extensions install https://github.com/bsunter93/staffing-math

仓库中的 gemini-extension.json 会运行同一个捆绑服务。Gemini CLI 会显示工具的文本答案,但不会绘制计划视图。

ChatGPT、Gemini 和 Claude 自定义连接器

这些连接器通过 Streamable HTTP 连接到公共 HTTPS URL 上的远程服务。托管版本可免费使用,无需登录。它不会保存你的任何数据;只会按天、应用和工具统计调用次数(参见使用次数):

https://staffing-math.vercel.app/mcp

如需运行自己的服务,请以 HTTP 模式启动服务器:

node dist/staffing-math.mjs --http --port 3000

它会监听 http://127.0.0.1:3000/mcp。将它置于 HTTPS 后面(使用主机、反向代理或 cloudflared tunnel --url http://localhost:3000 这样的隧道),然后添加 https://your-host/mcp 作为无需身份验证的连接器:

  • ChatGPT:插件,然后选择 Add,再选择 Add custom MCP server,无需身份验证。ChatGPT 会绘制计划视图。更新后,在插件设置中选择 Refresh tools 即可获取新的输入项。
  • Gemini:连接器,然后选择 Custom。Gemini 会显示文本答案。
  • Claude:Settings、Connectors、Add custom connector。如果在服务器上运行,请使用 --host 0.0.0.0。

HTTP 模式是无状态的。每个请求都会启动一个全新的服务器,因此可以横向扩展,无需会话。

托管

api/index.mjs 是同一个服务器,作为单个 Web 标准 fetch 处理程序(src/fetch.ts)运行,由 npm run build 构建。在 Vercel 上:

npx vercel deploy --prod

vercel.json 会将所有路径发送到这一个函数,并告知 Vercel 这里没有框架、无需安装任何内容,也无需构建,因此即使 Vercel 曾经将项目误判为其他类型,也仍然可以部署。.vercelignore 只会上传 api/ 和 vercel.json。在 Vercel 控制面板的项目页面中,拖入仅包含这两个文件的文件夹,无需 CLI 也能部署相同的服务。同一处理程序也可在 Cloudflare Workers、Deno 或 Bun 上运行。在 Workers 免费计划中,带有流失率的 36 个月计划可能会超过每个请求 10ms 的 CPU 限制;付费计划则没有这个问题。

工具

工具必需项可选项及默认值
required_fteweekly_volume、minutes_per_caseshrinkage 0.30、target_occupancy 0.85、hours_per_fte_week 40
hiring_planminutes_per_case,以及 weekly_volume(配合 monthly_growth 使用)或 weekly_volume_by_month上述三个可选项、months 12、current_headcount(第 1 个月所需人数)、annual_attrition 0、time_to_hire_months 2、ramp_months 0、hires_in_flight(无)、start_month
erlang_staffingcontacts_per_hour、handle_time_secondsanswer_within_seconds 20、service_level 0.80、shrinkage 0.30

分数按分数值填写:0.30 表示 30%。如果 shrinkage 填写为 30,系统会拒绝该值并说明原因。

每个结果都包含一个供模型使用的文本块,以及一个包含相同数字、输入项和步骤的 structuredContent 副本。全部三个工具均为只读,不会发出网络请求,也不会存储任何内容。

使用次数

托管服务 staffing-math.vercel.app 会为每个请求在计数器上加 1:按日期(UTC)、应用(User-Agent 的第一个词,例如 openai-mcp)和请求内容(initialize、tools_list、工具名称或 view)统计。它也会统计客户端连接时发送的应用名称。它绝不会保存工具输入、结果、IP 地址或完整的 User-Agent 字符串。计数可在 /stats 公开查看。

只有设置了 Upstash Redis REST URL 和令牌(KV_REST_API_URL 和 KV_REST_API_TOKEN,或 UPSTASH_REDIS_REST_ 这对变量)时才会进行计数。你自己的副本通过 stdio 或 HTTP 运行时不会进行计数。如果存储服务变慢或宕机,答案仍会正常返回;参见 src/usage.ts。

计划视图

hiring_plan 带有一个 MCP Apps 视图,地址为 ui://staffing-math/hiring-plan.html:这是一个脚本内联且不发出外部请求的 HTML 文件。支持 MCP Apps 的宿主会在回答下方显示它;其他宿主会忽略它,只显示文本。

  • 标题和下方的文字就是答案的文字表述,每次变化后,屏幕阅读器都会再次读出它们。
  • 图表附有文字说明。将指针移到某个月上,或聚焦图表并使用箭头键,即可听到对该月的描述。
  • 每个控件都是带标签的原生滑块或数字输入框,因此可以通过键盘操作。
  • “显示数字”会展开完整表格。
  • 视图会遵循宿主的浅色或深色主题。

视图本身不会进行计算。移动控件会使用新的参数再次调用 hiring_plan,并绘制返回的结果。

招聘计划的工作原理

  1. 每月所需 FTE = 每周工作时数 /(每个 FTE 的工时 x (1 - 损耗率) x 目标占用率)。
  2. 按月应用流失率,其月度值按复利方式折算为年度数值:1 - (1 - 年度流失率)^(1/12)。离职人数是期望值,因此员工人数可以是小数。
  3. 在第 m 个月开启的招聘申请,会从第 m + 招聘周期 + 爬坡期个月起计入产能。在完全完成爬坡前,新员工计为零,因此计划倾向于尽早开启招聘申请。
  4. 从新员工最早可计入的月份开始逐月推进;只要在岗 FTE 低于所需 FTE,求解器就会在能让员工及时到岗的月份按整数人数补足缺口,然后重新运行引擎。
  5. 无法通过新招聘申请解决最早可能到岗月份之前的月份。工具会指出这些月份及缺口。已入职或正在招聘流程中的人员可以弥补缺口:hires_in_flight 接收人数及各组人员开始计入的月份,计划只会开启仍有缺口时所需的招聘申请。
  6. 计划临近结束时开启的招聘申请,人员会在计划结束后到岗。使用增长率时,求解器会将预测延伸到最后一个月之后,以便仍能规划这些招聘申请,并会说明这一点。使用逐月预测时,计划不会超出你提供的最后一个月。
  7. 某个月的 FTE 至少比所需人数多 1 时,该月即为富余月份。工具会指出人员过剩最多的月份,视图则会用阴影标示所有富余月份。招聘无法解决富余月份;它会显示需求低于现有人员数量的月份。
  8. 未提供流失率时,计划会分别按每年 15% 和 30% 重新运行,并报告两种总人数。这些数字是供讨论参考的对照值,并非基准。

测试会检查计划是否覆盖所有可补足缺口的月份,并验证移除任一招聘申请后是否会导致某个月出现缺口,从而确保招聘人数不会超过预测需求。

数学依据

vendor/operating-model-simulator/ 是 Simulator 引擎在提交 758c9d7 中逐字节复制的版本:包括月度模型(run())、使用稳定递归且在超过 170 名 Agent 时不会溢出的 Erlang B 和 C,以及日历辅助函数。required_fte 和 hiring_plan 会构建单团队模型并调用 run();erlang_staffing 会调用 staffFor、serviceLevel 和 erlangC。本仓库在此基础上增加了每周到每月的换算、招聘求解器以及周边的 MCP 服务。

npm install
npm test               # upstream engine tests plus this repo's own
npm run check:vendor   # confirms vendor/ still matches upstream
npm run build          # rebuilds dist/staffing-math.mjs

测试包含对每个工具的手动计算、独立编写的教科书式 Erlang C,用于核验引擎结果,以及通过全部三种传输方式运行测试:内存、Streamable HTTP 和通过 stdio 运行的构建文件。

限制

Erlang C 假设等待期间无人挂断,且整个时间段内的到达率保持稳定,因此应按最繁忙的一小时配置人员。它不考虑成本或预算、不支持多团队路由,也不考虑月内的季节性变化。Operating Model Simulator 支持多个团队、团队之间的路由以及成本。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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