Skip to main content
Glama
lipeng5941

@sgs/oa-mcp-server

by lipeng5941

数智办公平台 MCP Server

山钢资本数智办公平台 AI 接入工具,支持所有主流 AI Agent 一键安装。

npm version License: MIT Node.js Version

⚠️ 重要:架构说明(部署前必读)

本工具连接山钢资本数智办公平台(OA 系统),需要以下运行环境

依赖

说明

原因

Kimi WebBridge

本地运行在 localhost:10086 的守护进程

OA 系统仅支持浏览器 Session 认证,需通过 WebBridge 代理请求

浏览器登录态

已登录 oatest.sgscf.cn 的浏览器会话

WebBridge 利用浏览器 Cookie 访问 OA API

Windows 操作系统

当前实现基于 Windows + git-bash

使用 curl.exe 与 WebBridge 通信

架构图

AI Agent (Claude Code / Cursor / ...)
    ↓ MCP Protocol
MCP Server (Node.js)
    ↓ HTTP POST (localhost:10086)
Kimi WebBridge 守护进程
    ↓ CDP Protocol
浏览器(已登录 OA 系统)
    ↓ HTTP + Cookie
数智办公平台 (oatest.sgscf.cn)

为什么不直接 HTTP 请求?

OA 系统认证基于浏览器 Session Cookie,不支持 API Key / Token 直接调用。Cookie 有效期约 30 分钟,且绑定浏览器指纹,终端直接发送无效。

当前方案是通过 WebBridge 复用浏览器的登录态,这是唯一可行的方式。


Related MCP server: DiSH MCP Server

🚀 安装

前置要求

  • Node.js >= 18.0

  • Kimi WebBridge 已安装并运行(http://127.0.0.1:10086

  • 浏览器已登录 OA 系统(https://oatest.sgscf.cn

安装命令

# 全局安装
npm install -g sgs-oa-mcp-server

# 或 npx 直接运行
npx sgs-oa-mcp-server

🔧 配置

环境变量(可选)

创建 .env 文件:

# MCP Server 配置
MCP_API_KEYS=dev-key-001,prod-key-002
PORT=3000

注:OA 系统地址和认证通过 WebBridge 自动处理,无需手动配置。


📋 可用工具

工具名

功能

参数

search_office

查询办公场所

officenm, address, current, size

get_office_detail

获取场所详情

officeid

search_room

查询会议室

roomnm, capacity, building, current, size

get_room_detail

获取会议室详情

roomid


📖 使用示例

安装后,在 AI Agent 中直接输入:

帮我查一下济南的办公场所

或 API 直接调用:

curl -X POST http://localhost:3000/api/v1/tools/search_office \
  -H "Content-Type: application/json" \
  -H "X-API-Key: dev-key-001" \
  -d '{"officenm": "济南"}'

🐛 常见问题

Q: 提示 "WebBridge session has no tab"?

确保 WebBridge 守护进程已启动,且浏览器已打开 OA 系统页面。

运行以下命令检查 WebBridge 状态:

curl http://127.0.0.1:10086/health

Q: 提示 "Failed to fetch"?

浏览器中的 OA 登录态可能已过期。在浏览器中重新访问 https://oatest.sgscf.cn 并登录。

Q: 为什么不能脱离浏览器使用?

OA 系统当前不支持 API Key / Token 认证,必须通过浏览器 Session 访问。如需纯 API 方式,需要 OA 系统开发团队开放 Token 认证接口。

Q: 安全性如何?

  • WebBridge 守护进程仅监听 localhost,不暴露到外网

  • MCP Server 支持 API Key 认证

  • 所有操作记录审计日志(logs/audit.log


📝 License

MIT © 2026 山钢资本金融科技服务中心

🔗 链接

Available Tools

4 tools
get_office_detail获取办公场所详情B

根据场所ID获取详细信息

ParametersJSON Schema
NameRequiredDescriptionDefault
officeidYes办公场所ID

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden but discloses no behavioral traits beyond the basic read operation. It does not mention return format, error behavior, permissions, or any side effects. The description is minimal and offers little beyond the tool's name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that fully communicates the core action and parameter. There is no fluff or repetition, and it is appropriately front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one required parameter, no output schema), and the description covers the basic purpose. However, it lacks details about what fields are included in '详细信息' or any special behavior, which makes it adequate but not complete for an agent that needs to know what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (officeid is described as '办公场所ID'). The description essentially restates the parameter's role without adding extra format, constraints, or examples, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description '根据场所ID获取详细信息' clearly states the action (获取/obtain) and resource (详细信息/detailed information) keyed by an ID. It is specific to a detail lookup, but does not explicitly differentiate from the sibling get_room_detail; differentiation relies on the tool name and title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: the tool is for retrieving office details when an office ID is available. However, there is no explicit guidance on when to prefer this over search_office or get_room_detail, nor any exclusions or alternatives mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_room_detail获取会议室详情B

根据会议室ID获取详细信息

ParametersJSON Schema
NameRequiredDescriptionDefault
roomidYes会议室ID

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for behavioral disclosure, but it only says 'get detailed information.' It does not mention that it is read-only, what happens if the room is not found, required permissions, or the structure of returned data. This is a significant gap for a tool that may involve network calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the action and purpose. It is concise and free of fluff, though it lacks extra context that could be useful. It earns its place but is minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple input schema (1 parameter) and no output schema, the description is adequate but vague: it does not specify what 'detailed information' includes, whether it returns partial data, or any error behavior. For a tool with no annotations, this leaves room for ambiguity but is not grossly insufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (roomid is described as '会议室ID'). The description merely restates the parameter ('根据会议室ID') without adding additional context, such as format, constraints, or examples. Baseline of 3 is appropriate when the schema fully documents parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('获取' / get) and resource ('详细信息' / detailed information) keyed to a room ID, clearly distinguishing it from sibling tools like get_office_detail and search_room. It is direct and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have a room ID, but it does not explicitly state when to use this tool versus alternatives (e.g., search_room to find the ID first, or get_office_detail for offices). No exclusions or context are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_office查询办公场所A

查询山钢资本数智办公平台的办公场所列表。可按名称、地址筛选。返回场所ID、名称、地址、所属机构等信息。

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNo每页条数
addressNo地址
currentNo页码
officenmNo办公场所名称

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that the tool returns office ID, name, address, and organization, and supports filtering. However, it does not mention pagination behavior (size/current parameters), which is a significant behavioral trait for a list API. The schema covers the parameters but the description could have added more context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the main purpose, then specifies filtering capabilities and return fields. Every word is useful with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides the essential purpose, filtering options, and return fields, which is largely sufficient for a list/search tool. It omits explicit mention of pagination parameters, but the schema already documents them, and the output schema is absent but return fields are described. Minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds that filtering is possible by name and address, aligning with officenm and address parameters, but does not explain the pagination parameters (size, current) meaning. Thus it adds minimal semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool queries the office list on the specific Shangang Capital Digital Office Platform, using a specific verb '查询' and specific resource '办公场所列表'. It distinguishes from sibling tools by focusing on offices rather than rooms and list versus detail operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly conveys when to use this tool: when searching/filtering office locations by name or address. It does not explicitly exclude other tools like get_office_detail for details, but the context makes the general usage pattern obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_room查询会议室A

查询会议室列表。可按名称、容纳人数、楼宇筛选。

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNo每页条数
roomnmNo会议室名称
currentNo页码
buildingNo楼宇
capacityNo最低容纳人数

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It identifies the operation as a query ('查询'), implying a safe read-only action, and lists filterable fields. However, it does not disclose pagination behavior, default result size, or any other behavioral traits beyond the basic query nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence (two in Chinese) that efficiently conveys the core purpose and main filters. There is no wasted wording, and it is front-loaded with the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple query tool with 5 parameters and no output schema, the description plus 100% schema coverage is mostly sufficient. It clearly indicates a list result and the main filter criteria, though it omits mention of pagination parameters (current/size) which are present in the schema. This is a minor gap given the low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description merely restates some parameter purposes (name, capacity, building) without adding new semantic meaning or clarifying nuances like 'capacity' meaning minimum capacity. No value is added beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states '查询会议室列表' (query meeting room list), specifying the verb and resource. It also mentions filters, which distinguishes it as a list/search operation from detail retrieval. However, it does not explicitly name or contrast sibling tools like get_room_detail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing meeting rooms with filters, but provides no explicit guidance on when to use this tool versus alternatives like search_office or get_room_detail. The context is clear but lacks exclusions or alternative references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv1.1.1
    • First observedget_office_detail
    • First observedget_room_detail
    • First observedsearch_office
    • First observedsearch_room

TDQS

A4/5.0
Disambiguation5/5

Each tool targets a distinct resource and action: search and detail for offices, search and detail for meeting rooms. There is no overlap between office and room tools, so an agent can easily select the correct tool.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: search_office, search_room, get_office_detail, get_room_detail. The pattern is uniform and predictable, making it easy to infer functionality from names.

Tool Count5/5

With only 4 tools, the set is well-scoped for a read-only query service focused on offices and meeting rooms. Each tool serves a clear purpose and the count is appropriate for the narrow domain.

Completeness5/5

The tool surface covers the full lifecycle for this domain: search both resource types and retrieve detailed information for each. No obvious missing operations are apparent given the presumably read-only nature of the server.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lipeng5941/oa-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server