SuccessFactors-MCP
SAP SuccessFactors Model Context Protocol Server
Installation · Quick Start · 43 Tools · Deployment · API Reference
______________________________________________________________________
A生产级 模型上下文协议 将Claude(或任何MCP客户端)连接到的服务器 SAP SuccessFactors 通过OData API。查询员工数据、管理权限、运行合规报告和管理人力资源操作——所有这些都是通过自然语言完成的。
You: "Who on the Engineering team has a work anniversary this month?"
Claude: [calls get_anniversary_employees] Found 3 upcoming anniversaries...
- Jane Smith (5 years - milestone!) - March 12
- Bob Johnson (2 years) - March 18
- Alice Chen (10 years - milestone!) - March 25为什么选择SF-MCP?
| 挑战 | SF-MCP解决方案 |
|---|---|
| SAP SuccessFactors API复杂且冗长 | 43个专用工具 界面整洁 |
| 构建OData查询需要深厚的SF知识 | 自然语言 --用简单的英语问克劳德 |
| API访问的安全问题 | 按请求身份验证、输入验证、审核日志记录 |
| 管理多个SF实例 | 21个数据中心 支持跨实例比较 |
| API速率限制和性能 | 连接池、响应缓存、速率限制 |
工具
43种工具,分为13个类别:
Configuration & Discovery (3 tools)
| 工具 | 说明 |
|---|---|
get_configuration | 检索任何实体的OData元数据 |
list_entities | 发现所有可用的OData实体 |
compare_configurations | 比较两个实例之间的实体配置 |
RBP Security (7 tools)
| 工具 | 说明 |
|---|---|
get_rbp_roles | 列出所有基于角色的权限角色 |
get_role_permissions | 获取特定角色的权限 |
get_user_permissions | 获取用户的所有权限 |
get_user_roles | 获取分配给用户的角色 |
get_permission_metadata | 将UI标签映射到权限类型 |
check_user_permission | 检查用户是否具有特定权限 |
get_dynamic_groups | 列出权限组(动态组) |
RBP Audit (2 tools)
| 工具 | 说明 |
|---|---|
get_role_history | 查看角色的修改历史记录 |
get_role_assignment_history | 查看角色分配的历史记录 |
Data Query (2 tools)
| 工具 | 说明 |
|---|---|
query_odata | 具有过滤、分页功能的灵活OData查询 |
get_picklist_values | 获取下拉/选择列表选项 |
Employee Lookup (4 tools)
| 工具 | 说明 |
|---|---|
get_employee_profile | 完整的个人资料,包括工作信息、经理、可选薪酬 |
search_employees | 按姓名、部门、地点或经理查找 |
get_employee_history | 工作经历——晋升、调动、职称变更 |
get_team_roster | 直接/间接报告的经理团队 |
Time Off (3 tools)
| 工具 | 说明 |
|---|---|
get_time_off_balances | 假期、PTO、病假余额 |
get_upcoming_time_off | 日期范围内的团队缺勤日历 |
get_time_off_requests | 待处理/已批准的休假请求 |
Hiring & Onboarding (3 tools)
| 工具 | 说明 |
|---|---|
get_open_requisitions | 带有状态和招聘经理的职位申请 |
get_candidate_pipeline | 按申请阶段分列的候选人 |
get_new_hires | 最近/即将入职的员工 |
Compliance & Reporting (3 tools)
| 工具 | 说明 |
|---|---|
get_terminations | 终止员工离职处理 |
get_employees_missing_data | 合规审计档案不完整 |
get_anniversary_employees | 即将到来的表彰工作纪念日 |
Performance & Compensation (2 tools)
| 工具 | 说明 |
|---|---|
get_performance_review_status | 审查整个组织的表格填写情况 |
get_compensation_details | 包含经常性/非经常性组成部分的薪酬明细 |
Position Management (3 tools)
| 工具 | 说明 |
|---|---|
get_position_details | 现任职位、部门、全职员工 |
get_vacant_positions | 编制计划的空缺职位 |
get_org_chart | 任何职位的组织层次结构(向上或向下) |
MDF Objects (3 tools)
| 工具 | 说明 |
|---|---|
get_mdf_object_definitions | 列出自定义MDF对象及其字段 |
query_mdf_object | 查询任何MDF/通用对象(cust_*) |
get_foundation_objects | 查询基础对象(部门、成本中心等) |
Workflow (2 tools)
| 工具 | 说明 |
|---|---|
get_pending_approvals | 用户或全局的待定工作流项 |
get_workflow_history | 审批步骤的审计跟踪 |
Monitoring & Admin (6 tools)
| 工具 | 说明 |
|---|---|
get_alert_notifications | 系统警报和通知 |
get_scheduled_job_status | 计划作业运行状态 |
get_integration_center_jobs | 集成中心作业状态 |
get_api_quota_status | 每个实例的速率限制使用 |
get_cache_status | 缓存命中率和条目数 |
clear_cache | 清除缓存的响应 |
安装
先决条件
- Python 3.10+
- 紫外线 包管理器
- 具有API访问权限的SAP SuccessFactors帐户
设置
git clone https://github.com/aiadiguru2025/sf-mcp.git
cd sf-mcp
uv sync快速开始
开发模式 (MCP检查员):
uv run mcp dev main.py标准模式 (克劳德桌面):
uv run main.pyHTTP模式 (云运行/远程):
PORT=8080 uv run main.pyClaude桌面集成
第一步——找到通往 uv
# macOS / Linux
which uv
# Windows (PowerShell)
Get-Command uv | Select-Object -ExpandProperty Source步骤2--编辑您的Claude桌面配置
| 操作系统 | 配置路径 |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| 窗户 | %APPDATA%\Claude\claude_desktop_config.json |
添加sf-mcp服务器:
{
"mcpServers": {
"sf-mcp": {
"command": "/path/to/uv",
"args": ["--directory", "/path/to/sf-mcp", "run", "main.py"]
}
}
}步骤3--重新启动克劳德桌面
MCP工具图标(锤子)将出现在输入区域,所有43个工具都可用。
注: 证书(auth_user_id和auth_password)在每次工具调用时都会提供这些参数——配置中没有存储任何内容。
部署
谷歌云运行
# Build and deploy
export PROJECT_ID=your-gcp-project-id
gcloud builds submit --tag gcr.io/$PROJECT_ID/sf-mcp
gcloud run deploy sf-mcp \
--image gcr.io/$PROJECT_ID/sf-mcp \
--platform managed \
--region us-central1然后将Claude Desktop指向远程URL:
{
"mcpServers": {
"sf-mcp": {
"url": "https://sf-mcp-xxxxx-uc.a.run.app/mcp"
}
}
}Docker(本地)
docker build -t sf-mcp .
docker run -p 8080:8080 sf-mcpAPI密钥保护(可选)
集 MCP_API_KEY 要要求在HTTP端点上进行身份验证,请执行以下操作:
MCP_API_KEY=your-secret-key PORT=8080 uv run main.py客户必须包括 X-API-Key: your-secret-key 在请求中。
配置
所有工具参数(data_center, environment, auth_user_id, auth_password)根据请求提供。服务器端环境变量是可选的:
速率限制
| 变量 | 默认值 | 描述 |
|---|---|---|
SF_RATE_LIMIT | 100 | 每个实例每个窗口的最大请求数 |
SF_RATE_LIMIT_WINDOW | 60 | 窗口持续时间(秒) |
SF_RATE_LIMIT_WARN_THRESHOLD | 0.8 | 使用率达到80%时发出日志警告 |
SF_RATE_LIMIT_RETRY_AFTER | 5 | 429重试等待秒数 |
SF_RATE_LIMIT_MAX_RETRIES | 3 | 最多429次重试尝试 |
响应缓存
| 变量 | 默认值 | 描述 |
|---|---|---|
SF_CACHE_TTL_METADATA | 3600 | 元数据缓存TTL(1小时) |
SF_CACHE_TTL_SERVICE_DOC | 3600 | 服务文档缓存TTL(1小时) |
SF_CACHE_TTL_PICKLIST | 1800 | 选择列表缓存TTL(30分钟) |
SF_CACHE_TTL_PERMISSIONS | 3600 | 权限缓存TTL(1小时) |
SF_CACHE_TTL_DEFAULT | 0 | 默认TTL(0=禁用) |
SF_CACHE_MAX_ENTRIES | 1000 | 驱逐前的最大缓存条目数 |
终端保护
| 变量 | 默认值 | 描述 |
|---|---|---|
MCP_API_KEY | *(无)* | HTTP端点身份验证的API密钥 |
复制 .env.example 到 .env 自定义:
cp .env.example .env支持的数据中心
6大洲的21个数据中心,支持别名:
| 数据中心 | 别名 | 位置 | 环境 |
|---|---|---|---|
| DC2 | DC57 | 荷兰 | 预览、生产、销售_demo |
| DC4 | DC68 | 美国弗吉尼亚州 | 预览、生产、销售_demo |
| DC8 | DC70 | 美国弗吉尼亚州阿什本 | 预览、生产、销售_demo |
| DC10 | DC66 | 澳大利亚悉尼 | 预览、制作 |
| DC12 | DC33 | 德国 | 预览、生产 |
| DC15 | DC30 | 中国上海 | 预览、制作 |
| DC17 | DC60 | 加拿大多伦多 | 预览、制作 |
| DC19 | DC62 | 巴西圣保罗 | 预览、制作 |
| DC22 | -- | 阿联酋迪拜 | 预览、制作 |
| DC23 | DC84 | 沙特阿拉伯利雅得 | 预览、生产 |
| DC40 | -- | -- | sales_demo |
| DC41 | -- | 美国弗吉尼亚州 | 预览、制作 |
| DC44 | DC52 | 新加坡 | 预览、制作 |
| DC47 | -- | 加拿大中部 | 预览、制作 |
| DC50 | -- | 日本东京 | 预览、制作 |
| DC55 | -- | 德国法兰克福 | 预览、生产 |
| DC74 | -- | 瑞士苏黎世 | 预览、生产 |
| DC80 | -- | 印度孟买 | 预览、制作 |
| DC82 | -- | 沙特阿拉伯利雅得 | 预览,生产 |
建筑
sf-mcp/
├── main.py # Entry point (stdio + HTTP modes)
├── sf_mcp/
│ ├── server.py # FastMCP instance
│ ├── config.py # DC mappings, constants, env vars
│ ├── auth.py # Credential resolution, API key middleware
│ ├── client.py # HTTP client (OData, metadata, service doc, pagination)
│ ├── cache.py # TTL-based response cache with deep-copy safety
│ ├── rate_limiter.py # Sliding-window rate limiter (per-instance)
│ ├── validation.py # 10 input validators with registry pattern
│ ├── decorators.py # sf_tool decorator (cross-cutting concerns)
│ ├── dependencies.py # FastMCP DI for schema exclusion
│ ├── logging_config.py # Cloud Logging JSON formatter, audit_log()
│ ├── xml_utils.py # Safe XML parsing (defusedxml), SAP date parsing
│ └── tools/ # 43 tools across 13 modules
│ ├── configuration.py # get_configuration, compare_configurations, list_entities
│ ├── permissions.py # 7 RBP security tools
│ ├── audit.py # Role history, role assignment history
│ ├── query.py # query_odata, get_picklist_values
│ ├── employee.py # Profile, search, history, team roster
│ ├── time_off.py # Balances, upcoming absences, requests
│ ├── recruiting.py # Requisitions, pipeline, new hires
│ ├── compliance.py # Terminations, missing data, anniversaries, reviews, comp
│ ├── position.py # Position details, vacancies, org chart
│ ├── workflow.py # Pending approvals, workflow history
│ ├── mdf.py # MDF object definitions, queries, foundation objects
│ ├── monitoring.py # Alerts, scheduled jobs, integration jobs
│ ├── admin.py # Rate limit quota, cache status, cache clear
│ └── utils.py # Shared utilities (display_name)
├── tests/ # 110 tests
├── Dockerfile # Cloud Run container
├── .env.example # Configuration template
└── pyproject.toml # Project metadata, dependencies, linter config设计原则
零样板 --The sf_tool 装饰器处理请求ID生成、计时、审计日志、输入验证、凭证检查、错误处理和 $top 夹紧。工具函数仅包含业务逻辑。
缺省安全 -10个输入验证器(regex allowlists)、OData注入防止、XXE-safe XML解析(defosedxml)、定时安全API密钥比较(hmac.compare_dispest)以及日志中的自动凭证屏蔽。
生产就绪 --连接池(requests.Session)、突变安全响应缓存(put/get深度复制)、滑动窗口速率限制和自动429重试,以及与Cloud Logging兼容的JSON审计跟踪。
架构清理 --内部参数(request_id, start_time, api_host)通过FastMCP的依赖注入从MCP工具模式中隐藏,为LLM消费者保持工具接口的清洁。
安全
| 层 | 机制 |
|---|---|
| 输入验证 | 10个基于正则表达式的验证器;OData过滤器块列表检查原始+URL解码+双重解码输入 |
| 预防注射 | 实体路径、$select、$orderby、$filter、$expand均已验证;控制字符被拒绝 |
| 认证 | 按请求凭据(从未存储);定时安全API密钥比较通过 hmac.compare_digest |
| XML安全 | defusedxml 防止XXE、实体扩展和DTD攻击 |
| 审核日志记录 | 每个工具调用都用结构化JSON记录;密码自动屏蔽 |
| 缓存安全 | 在存储和检索时进行深度复制,以防止突变错误 |
| 日期处理 | 所有SAP时间戳解析都使用显式UTC来防止时区不一致 |
测试
# Run all 110 tests
uv run pytest tests/ -v
# Run with coverage
uv run pytest tests/ --cov=sf_mcp
# Lint
uv run ruff check .
# Type check
uv run mypy sf_mcp/测试覆盖范围包括:
- 配置 --DC映射分辨率、不区分大小写、别名、错误情况
- 验证 --所有10个验证器均具有有效/无效输入,防止注射
- 客户 --模拟HTTP响应(200、401、500,空,连接错误)
- 速率限制器 --限制执行、滑动窗口、每实例隔离、线程安全
- 缓存 --Put/get、TTL到期、类别TTL、无效、驱逐、深度复制安全
- 分页 --单页/多页,max_pages限制,错误处理,$跳过增量
- 装饰器 --值注入、验证错误、max_top箝位、异常处理
API 参考
每个工具都接受这些常见参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
instance | string | 是 | SuccessFactors公司ID |
data_center | string | Yes | SAP数据中心代码(例如。, DC55, DC10) |
environment | string | 是 | preview, production,或 sales_demo |
auth_user_id | string | 是 | SuccessFactors用户ID(不带@instance) |
auth_password | string | 是 | SuccessFactors密码 |
Configuration Tools
get_configuration
检索SuccessFactors实体的OData元数据。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
entity | string | Yes | OData实体名称(例如。, User, Position) |
list_entities
发现实例中所有可用的OData实体。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
category | string | 否 | foundation, employee, talent, platform,或 all |
compare_configurations
比较两个实例之间的实体配置(例如,dev与prod)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
instance1 | string | 是 | 第一个实例 |
instance2 | string | 是 | 第二个实例 |
entity | string | 是 | 要比较的实体 |
data_center1 | string | 是 | 实例数据中心1 |
environment1 | string | 是 | 实例1的环境 |
data_center2 | string | 是 | 实例数据中心2 |
environment2 | string | 是 | 实例2的环境 |
RBP Security Tools
get_rbp_roles
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
include_description | boolean | 否 | 包含角色描述(默认值:false) |
get_role_permissions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
role_ids | string | 是 | 单个或逗号分隔: 10 或 10,20,30 |
locale | string | 否 | 标签的区域设置(默认值: en-US) |
get_user_permissions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
user_ids | string | 是 | 单个或逗号分隔: admin 或 admin,user2 |
locale | string | 否 | 标签的区域设置(默认值: en-US) |
get_user_roles
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
user_id | string | 是 | 要查找角色的用户ID |
include_permissions | boolean | 否 | 还获取每个角色的权限(默认值:false) |
get_permission_metadata
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
locale | string | 否 | 标签的区域设置(默认值: en-US) |
check_user_permission
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
access_user_id | string | 是 | 有权检查的用户 |
target_user_id | string | 是 | 权限的目标用户 |
perm_type | string | 是 | 元数据中的权限类型 |
perm_string_value | string | 是 | 权限字符串值 |
perm_long_value | string | 否 | 权限长值(默认值: -1L) |
get_dynamic_groups
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
group_type | string | 否 | 按组类型筛选 |
RBP Audit Tools
get_role_history
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
role_id | string | 否 | 按角色ID筛选 |
role_name | string | 否 | 按角色名称筛选 |
from_date | string | 否 | 开始日期(YYYY-MM-DD) |
to_date | string | 否 | 结束日期(YYYY-MM-DD) |
top | integer | 否 | 最大记录数(默认值:100,最大值:500) |
get_role_assignment_history
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
role_id | string | 否 | 按角色ID筛选 |
user_id | string | 否 | 按用户ID筛选 |
from_date | string | 否 | 开始日期(YYYY-MM-DD) |
to_date | string | 否 | 结束日期(YYYY-MM-DD) |
top | integer | 否 | 最大记录数(默认值:100,最大值:500) |
至少一个role_id或user_id是必需的。
Data Query Tools
query_odata
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
entity | string | 是 | 实体名称或密钥: User 或 User('admin') |
select | string | 否 | 字段: userId,firstName,lastName |
filter | string | 否 | OData筛选器: status eq 'active' |
expand | string | 否 | 导航属性: empInfo,jobInfoNav |
top | integer | 否 | 最大记录数(默认值:100,最大值:1000) |
skip | integer | 否 | 要跳过的记录 |
orderby | string | 否 | 排序: lastName asc |
paginate | boolean | 否 | 自动获取所有页面(默认值:false) |
max_pages | integer | 否 | 分页时的最大页数(默认值:10,最大值:50) |
get_picklist_values
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
picklist_id | string | 是 | 选择列表ID: ecJobFunction, nationality |
locale | string | 否 | 标签的区域设置(默认值: en-US) |
include_inactive | boolean | 否 | 包括非活动值(默认值:false) |
Employee Lookup Tools
get_employee_profile
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
user_id | string | 是 | 员工用户ID |
include_compensation | boolean | 否 | 包括补偿(默认值:false) |
search_employees
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
search_text | string | 否 | 部分名称搜索 |
department | string | 否 | 按部门筛选 |
location | string | 否 | 按位置筛选 |
manager_id | string | 否 | 筛选经理的报告 |
status | string | 否 | active, inactive,或 all (默认值: active) |
top | integer | 否 | 最大结果(默认值:50,最大值:200) |
get_employee_history
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
user_id | string | 是 | 员工用户ID |
include_compensation_changes | boolean | 否 | 包括薪资历史记录(默认值:false) |
get_team_roster
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
manager_id | string | 是 | 经理的用户ID |
include_indirect_reports | boolean | 否 | 包括报告的报告(默认值:false) |
top | integer | 否 | 最大直接报告数(默认值:100,最大值:200) |
Time Off Tools
get_time_off_balances
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
user_ids | string | 是 | 逗号分隔的用户ID(最多50个) |
as_of_date | string | 否 | 截至日期的余额(YYYY-MM-DD) |
get_upcoming_time_off
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
start_date | string | 是 | 范围开始(YYYY-MM-DD) |
end_date | string | 是 | 范围结束(YYYY-MM-DD) |
department | string | 否 | 按部门筛选 |
manager_id | string | 否 | 筛选到经理的团队 |
status | string | 否 | approved, pending,或 all (默认值: approved) |
top | integer | 否 | 最大结果(默认值:200,最大值:500) |
get_time_off_requests
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
user_id | string | 否 | 筛选到员工 |
status | string | 否 | pending, approved, rejected, cancelled,或 all (默认值: pending) |
from_date | string | 否 | 日期后提交(YYYY-MM-DD) |
top | integer | 否 | 最大结果(默认值:50,最大值:200) |
Hiring & Onboarding Tools
get_open_requisitions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
department | string | 否 | 按部门筛选 |
hiring_manager_id | string | 否 | 按招聘经理筛选 |
location | string | 否 | 按位置筛选 |
status | string | 否 | open, filled, closed,或 all (默认值: open) |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
get_candidate_pipeline
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
requisition_id | string | 是 | 职位申请ID |
include_rejected | boolean | 否 | 包括被拒绝的候选人(默认值:false) |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
get_new_hires
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
start_date_from | string | 是 | 日期(YYYY-MM-DD)当天/之后的雇佣人数 |
start_date_to | string | 是 | 在日期(YYYY-MM-DD)或之前招聘 |
department | string | 否 | 按部门筛选 |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
Compliance & Reporting Tools
get_terminations
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
from_date | string | 是 | 范围开始(YYYY-MM-DD) |
to_date | string | 是 | 范围结束(YYYY-MM-DD) |
department | string | 否 | 按部门筛选 |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
get_employees_missing_data
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
check_fields | string | 是 | 逗号分隔: email, phone, address, emergency_contact |
department | string | 否 | 按部门筛选 |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
get_anniversary_employees
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
from_date | string | 是 | 范围开始(YYYY-MM-DD) |
to_date | string | 是 | 范围结束(YYYY-MM-DD) |
milestone_years_only | boolean | 否 | 只有1、5、10、15、20、25+年(默认值:false) |
department | string | 否 | 按部门筛选 |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
Performance & Compensation Tools
get_performance_review_status
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
form_template_id | string | 否 | 按表单模板筛选 |
department | string | 否 | 按部门筛选 |
manager_id | string | 否 | 按经理筛选 |
status | string | 否 | not_started, in_progress, completed,或 "" 为所有人 |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
get_compensation_details
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
user_ids | string | 是 | 逗号分隔的用户ID(最多20个) |
effective_date | string | 否 | 截至日期的薪酬(YYYY-MM-DD) |
Position Management Tools
get_position_details
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
position_id | string | 是 | 位置ID |
get_vacant_positions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
department | string | 否 | 按部门筛选 |
location | string | 否 | 按位置筛选 |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
get_org_chart
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
position_id | string | 是 | 起始位置ID |
direction | string | 否 | down 或 up (默认值: down) |
levels | integer | 否 | 要遍历的级别(默认值:2,最大值:5) |
MDF Object Tools
get_mdf_object_definitions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
object_name | string | 否 | 特定MDF对象(例如。, cust_myObject).空=列出所有。 |
query_mdf_object
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
object_name | string | Yes | MDF对象名称(例如。, cust_myObject) |
select | string | 否 | 逗号分隔的字段 |
filter | string | 否 | OData筛选器 |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
skip | integer | 否 | 分页偏移 |
orderby | string | 否 | 排序顺序 |
effective_date | string | 否 | 生效日期筛选器(YYYY-MM-DD) |
get_foundation_objects
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
object_type | string | 是 | company, department, division, location, cost_center, job_code, job_function, pay_grade, pay_group, business_unit, event_reason, legal_entity |
filter | string | 否 | 其他OData筛选器 |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
include_inactive | boolean | 否 | 包括结束日期记录(默认值:false) |
Workflow Tools
get_pending_approvals
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
user_id | string | 否 | 筛选到特定审批人 |
wf_request_id | string | 否 | 筛选到特定的工作流请求 |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
get_workflow_history
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
wf_request_id | string | 是 | 工作流请求ID |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
Monitoring & Admin Tools
get_alert_notifications
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
from_date | string | 否 | 开始日期(YYYY-MM-DD) |
to_date | string | 否 | 结束日期(YYYY-MM-DD) |
top | integer | 否 | 最大结果(默认值:100,最大值:500) |
get_scheduled_job_status
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
job_name | string | 否 | 按作业名称筛选 |
top | integer | 否 | 最大结果(默认值:50,最大值:500) |
get_integration_center_jobs
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
job_name | string | 否 | 按作业名称筛选 |
status | string | 否 | 按状态筛选 |
top | integer | 否 | 最大结果(默认值:50,最大值:500) |
get_api_quota_status
返回指定实例的当前速率限制使用情况。
get_cache_status
返回缓存命中率、按类别划分的条目计数和内存使用情况。
clear_cache
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
target_instance | string | 否 | 清除特定实例。清空=全部清除。 |
查询示例
用自然语言问克劳德:
| 查询 | 使用的工具 |
|---|---|
| “显示销售部门的所有用户” | search_employees |
| “jsmith有哪些权限?” | get_user_permissions |
| “比较dev和prod之间的用户配置” | compare_configurations |
| “下周谁在度假?” | get_upcoming_time_off |
| “列出所有未完成的工程职位申请” | get_open_requisitions |
| “jdoe还剩多少PTO?” | get_time_off_balances |
| “显示3月份开始的所有新员工” | get_new_hires |
| “这个月谁有10周年纪念日?” | get_anniversary_employees |
| “我的团队的绩效评估情况如何?” | get_performance_review_status |
| “显示John的完整工作历史” | get_employee_history |
| “我们的实例中存在哪些自定义MDF对象?” | get_mdf_object_definitions |
| “列出所有部门及其成本中心” | get_foundation_objects |
| “是否有任何待处理的工作流审批?” | get_pending_approvals |
| “检查我们的集成作业的状态” | get_integration_center_jobs |
常见成功因素实体
| 类别 | 实体 |
|---|---|
| 员工 | 用户、EmpEmpEmployment、EmpJob、PerPersonal、PerPhone、PerEmail |
| 基础 | FOCompany,FODepartment,FOJobCode,FOLocation,FOPayGrade |
| 位置 | 位置、位置实体、位置矩阵关系 |
| 人才 | 目标、目标计划、绩效评估、能力 |
| 招聘 | 职位申请、候选人、求职申请 |
使用 list_entities 发现实例中的所有可用实体。
故障排除
Authentication Errors (HTTP 401)
- 验证凭据格式:用户ID 没有
@instance - 确认密码正确
- 确保API用户在SuccessFactors管理中心中具有适当的权限
Validation Errors
所有输入都经过验证,以防止注射攻击:
| 参数 | 规则 |
|---|---|
instance | 仅限字母数字、下划线和连字符 |
entity | 有效的OData实体名称模式 |
filter | 没有被屏蔽的关键字($batch, $metadata, ``等等) |
locale | 格式类似 en-US 或 de |
select / orderby | 有效的字段名称模式 |
Server Disconnected (Claude Desktop)
- 验证
uv配置中的路径正确:which uv - 检查日志:
tail -f ~/Library/Logs/Claude/mcp*.log - 手动测试:
uv run mcp dev main.py - 确保已安装Python 3.10+:
python3 --version
Rate Limit Errors
- 服务器自动重试HTTP 429响应(最多3次)
- 使用
get_api_quota_status检查当前使用情况 - 通过以下方式增加限额
SF_RATE_LIMIT环境变量 - 缓存响应
SF_CACHE_TTL_DEFAULT以减少API调用
依赖项
| 包装 | 版本 | 用途 |
|---|---|---|
| fastmcp | >=2.0.0 | 模型上下文协议SDK |
| 请求: | >=2.31.0 | 带连接池的HTTP客户端 |
| debvedxml | >=0.7.0 | XXE安全XML解析 |
| python dotenv | >=1.0.0 | 加载环境变量 |
| 优维康 | >=0.30.0 | ASGI服务器用于HTTP传输 |
开发依赖关系: pytest、ruff、mypy
贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支:
git checkout -b feature/my-feature - 运行测试:
uv run pytest tests/ -v - 运行linting:
uv run ruff check . - 提交您的更改
- 打开拉取请求
更新日志
看 更改日志.md 发布历史。
许可证
该项目根据 MIT许可证 --看看 许可证 文件以获取详细信息。
______________________________________________________________________
Built with FastMCP · Powered by Model Context Protocol
