mcp-server-smartsheet-rm

io.github.christianclaudio由 GitHub 账号 christianclaudio 发布v2.2.0更新于 Oct 30, 2026

MCP server for Smartsheet Resource Management (10,000ft API) time tracking and scheduling.

已验证STDIO仅桌面效率与工作流商业与电商

概览

AI 生成的概览

面向 Smartsheet Resource Management(10,000ft API)的 MCP 服务器,让助手读写工时表、项目、资源分配与后台管理数据。

可以做什么
  • 登记、修改、删除、锁定与审批工时条目,批量填写每周工时表并按目标工时核对
  • 列出、创建、更新、删除与复制项目、阶段和资源分配,包括占位资源和子任务
  • 读取产能与排班数据,如可用性、利用率、费率、工作状态选项以及报表行与合计
  • 维护后台记录:用户、角色、学科、客户与联系人、休假类型、节假日、费用、标签、自定义字段和 Webhook
  • 通过 profile(full、time、projects、admin、readonly 或 timesheets、staffing 等岗位配置)限制暴露的工具
适用场景
适合需要让助手直接操作 Smartsheet Resource Management 账户的场景:填报或更正工时、查看利用率与可用性、调整资源分配,或维护项目与组织基础数据。仅需查看时可使用只读模式。
运行要求
以 Python 包形式在本地运行(uvx 或 pip),需要 Python 与 uv。必须提供 Smartsheet RM(10,000ft)API 令牌,放在 SMARTSHEET_RM_API_TOKEN;使用 Smartsheet Gov 时还需 SMARTSHEET_RM_GOV_SMARTSHEET_API_TOKEN,并覆盖基础 URL 与允许主机列表。需要能访问 Smartsheet RM API 的网络。
安装前请注意
该令牌可访问真实的工时、项目与组织数据,且大量工具会写入、审批、锁定或删除记录;删除需 confirm=True,批量删除还需 SMARTSHEET_RM_ALLOW_BULK_DESTRUCTIVE=1。许多工具调用未公开的接口路径,Smartsheet 可能随时更改或移除。若以 HTTP 方式提供服务,应设置 SMARTSHEET_RM_MCP_AUTH_TOKEN,避免无认证的公网绑定。

安装

在 SourceWeft 中

  1. 打开 控制台中的 mcp-server-smartsheet-rm,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

📋 mcp-server-smartsheet-rm

[CI] [PyPI] [Python] [License: Apache-2.0] [Coverage] [CodeRabbit Reviews]

Enterprise Model Context Protocol (MCP) server for Resource Management by Smartsheet (10,000ft API).

Enables AI coding agents, planners, and assistants (Claude, Cortex, Antigravity, VS Code) to work with the Smartsheet RM public REST API: time tracking & timesheet reconciliation, resource scheduling & allocations, capacity planning, project & phase management, leaves/holidays, expense tracking, and custom fields.


🏗️ System Architecture

mermaid
graph TD    Client["AI Agent (Claude / Cortex / Antigravity / Cursor)"] -->|"MCP Stdio / Streamable HTTP /mcp"| Server["Root Gateway create_server()"]    Server --> Middle["Parent Middleware (ParentAudit / ReadOnly Gate)"]    Middle --> SubTime["time namespace (time_* — 19 tools, incl. 1 bulk-gated)"]    Middle --> SubProj["projects namespace (projects_* — 36 tools, incl. 1 bulk-gated)"]    Middle --> SubAdmin["admin namespace (admin_* — 60 tools)"]    SubTime --> Guards["Domain Guards"]    SubProj --> Guards    SubAdmin --> Guards    Guards --> ClientPool["SmartsheetRMClient (httpx.AsyncClient Pool)"]    ClientPool -->|"auth header + 429 Jitter Retry"| API["Smartsheet RM (10,000ft API)"]

create_server mounts the time, projects, and admin sub-servers with FastMCP 4 namespace=, so tools/list names are time_*, projects_*, and admin_*. Legacy rm_* names are not registered on the gateway.


🚀 FastMCP 4 Server Composition

  • Domain mounts (root.mount(..., namespace=...)):
    • namespace="time" → time_* (19 tools, including the bulk-gated time_bulk_delete_time_entries).
    • namespace="projects" → projects_* (36 tools, including the bulk-gated projects_bulk_delete_assignments).
    • namespace="admin" → admin_* (60 tools).
  • Hierarchical middleware:
    • Parent: ParentAuditMiddleware (timing, lifecycle logs, secret redaction) and ReadOnlyGateMiddleware (annotation-driven read-only gate, see below).
    • Child: TimeDomainGuardMiddleware (logged hours must be 0–24; bulk gate), ProjectsDomainGuardMiddleware (project names must be non-empty; bulk gate), AdminDomainGuardMiddleware (per_page must be ≤ 1000).

Profiles

Pick a profile with --profile or SMARTSHEET_RM_PROFILE (default full). An unknown profile name fails at startup with ValueError. There are two kinds:

  • Domain-mount profiles mount whole domains: full, time, projects, admin, and readonly.
  • Job profiles mount every domain, then expose only an explicit list of tool names for one job. Prompts and resources stay available on every job profile and on readonly; the domain-mount profiles time, projects and admin carry only their own domain's prompts and resources. Each listed name is checked against the full catalog when the server builds, so a typo fails at startup.
ProfileJob it servesToolsWith SMARTSHEET_RM_READONLY=1
fullComplete catalog, nothing omitted. Bulk tools are listed and refused at call time unless SMARTSHEET_RM_ALLOW_BULK_DESTRUCTIVE=1. Tool Search and Code Mode attach only here.11550
timeTime tracking, approvals and timesheet recipes (time domain).196
projectsProjects, phases, assignments, placeholders and subtasks (projects domain).3619
adminUsers, org reference data, clients, expenses, fields, reports and webhooks (admin domain).6025
readonlyInspect without side effects: every tool annotated readOnlyHint=True.5050
timesheetsTeam member or manager logs, corrects, submits, locks and approves weekly time against their assignments.2614
staffingResource manager checks availability and utilization and creates or adjusts assignments, placeholders and subtasks.3324
org_setupResource-management admin onboards people and maintains org reference data, custom-field definitions, user statuses and webhooks.3513
portfolioPMO sets up and maintains projects, phases, clients, expenses and project metadata, and reads budget and report totals.3621

Seven tools are in no job profile and are reachable only in full (or their domain-mount profile): time_bulk_delete_time_entries, projects_bulk_delete_assignments, admin_delete_client, admin_delete_client_contact, admin_create_expense_category, admin_delete_expense_category, and admin_delete_tag.

Read-only behavior

  • The MCP readOnlyHint annotation is the only thing that decides whether a tool is read-only. Every tool declares it explicitly: true on the 50 reads and false on the 65 writes. A tool with no annotation or no readOnlyHint counts as a write.
  • --profile readonly or SMARTSHEET_RM_READONLY=1 (on any profile) lists only the read-only tools, and ReadOnlyGateMiddleware refuses any call to a real tool that is not read-only, including a write the filter hid. A refusal comes back as a tool result with isError: true.
  • A name that is not a tool on the server gets FastMCP's normal Unknown tool error, directly or through call_tool, so a typo is never reported as a blocked tool.
  • With Tool Search on, the gate checks the tool that call_tool wraps. Reads through call_tool work and writes are refused. Without Tool Search, call_tool is not a tool on the server, so a call to it gets Unknown tool: 'call_tool'.
  • If the gate cannot see the serving server, it refuses the call.

Bulk gate

time_bulk_delete_time_entries and projects_bulk_delete_assignments are listed in full, time and projects. The domain guards refuse them at call time (isError: true) unless SMARTSHEET_RM_ALLOW_BULK_DESTRUCTIVE=1, and the handlers still require confirm=True. Read-only mode hides and refuses them.

Tool Search and Code Mode

tools/list is flat by default. Discovery is opt-in and attaches only on full:

  • --enable-tool-search / SMARTSHEET_RM_ENABLE_TOOL_SEARCH=1 replaces tools/list with search_tools and call_tool. The backend is regex (default) or bm25 (--tool-search-backend / SMARTSHEET_RM_TOOL_SEARCH_BACKEND).
  • --enable-code-mode / SMARTSHEET_RM_ENABLE_CODE_MODE=1 attaches FastMCP's experimental Code Mode (search, get_schema, execute). Code Mode needs the sandbox from the package's code-mode extra (fastmcp[code-mode], which ships pydantic-monty): pip install "mcp-server-smartsheet-rm[code-mode]" or uvx --from "mcp-server-smartsheet-rm[code-mode]" smartsheet-rm-mcp --enable-code-mode. Without it, Code Mode is skipped with a warning and the flat catalog is served.
  • Turning on both raises ValueError. Asking for either on another profile logs a warning and keeps the flat list.
  • search_tools, search and get_schema only read the catalog and are annotated readOnlyHint=True. Under read-only, Code Mode execute is refused.

⚡ Tool Surface Overview

The server exposes tools covering projects, resources, timesheets, and capacity. Call the namespaced names below:

  • Default Registration: 115 tools on full (the 2 bulk-destructive tools are listed and refused at call time unless SMARTSHEET_RM_ALLOW_BULK_DESTRUCTIVE=1).
  • Read-Only Mode: 50 tools (readOnlyHint=true).
  • Destructive Gates: 21 tools requiring explicit confirm=True (19 standard + 2 bulk).
  • Idempotent Operations: 54 tools with idempotentHint=true (the 50 read-only tools, plus time_update_time_approval_status, time_lock_timesheet, admin_set_custom_field_values, and admin_set_user_status).

Domain Overview

Agents call these tools/list names. Counts for time and projects include the bulk-gated tool.

  1. Time (time_*, 19 tools): time_list_time_entries, time_get_time_entry, time_create_time_entry, time_create_user_time_entry, time_create_project_time_entry, time_update_time_entry, time_delete_time_entry, time_list_user_suggestions, time_update_time_approval_status, time_lock_timesheet, time_fill_weekly_timesheet, time_confirm_suggested_hours, time_reconcile_and_submit_week, time_list_approvals, time_create_approval, time_delete_approval, time_list_time_entry_categories, time_list_project_time_entry_categories. Bulk-gated: time_bulk_delete_time_entries.
  2. Projects (projects_*, 36 tools): projects_list_projects, projects_get_project, projects_create_project, projects_update_project, projects_delete_project, projects_list_project_users, projects_list_project_phases, projects_get_project_phase, projects_create_project_phase, projects_update_project_phase, projects_delete_project_phase, projects_list_assignments, projects_get_assignment, projects_create_assignment, projects_create_project_assignment, projects_create_user_assignment, projects_update_assignment, projects_delete_assignment, projects_clone_project_schedule, projects_list_status_options, projects_list_placeholder_resources, projects_create_placeholder_resource, projects_delete_placeholder_resource, projects_list_assignment_subtasks, projects_create_assignment_subtask, projects_delete_assignment_subtask, projects_list_assignables, projects_get_assignable, projects_list_project_budget_items, projects_get_budget_item, projects_get_project_budget_item, projects_list_project_members, projects_list_relationships_project_members, projects_list_relationships_project_memberships, projects_list_user_project_memberships. Bulk-gated: projects_bulk_delete_assignments.
  3. Admin (admin_*, 60 tools):
    • Users, roles, disciplines, and capacity: admin_list_users, admin_get_user, admin_create_user, admin_update_user, admin_delete_user, admin_list_user_bill_rates, admin_create_user_bill_rate, admin_get_user_availability, admin_get_user_utilization, admin_list_roles, admin_create_role, admin_update_role, admin_delete_role, admin_list_disciplines, admin_create_discipline, admin_update_discipline, admin_delete_discipline.
    • Clients and contacts: admin_list_clients, admin_get_client, admin_create_client, admin_update_client, admin_delete_client, admin_list_client_contacts, admin_create_client_contact, admin_delete_client_contact.
    • Leaves and holidays: admin_list_leave_types, admin_get_leave_type, admin_create_leave_type, admin_update_leave_type, admin_delete_leave_type, admin_list_holidays, admin_get_holiday, admin_create_holiday, admin_update_holiday, admin_delete_holiday.
    • Expenses: admin_list_expenses, admin_get_expense, admin_create_expense, admin_update_expense, admin_delete_expense, admin_list_expense_categories, admin_create_expense_category, admin_delete_expense_category.
    • Tags and custom fields: admin_list_tags, admin_create_tag, admin_delete_tag, admin_list_custom_fields, admin_get_custom_field, admin_create_custom_field, admin_update_custom_field, admin_delete_custom_field, admin_list_custom_field_values, admin_set_custom_field_values.
    • Status, reports, and webhooks: admin_get_user_statuses, admin_set_user_status, admin_get_report_rows, admin_get_report_totals, admin_list_webhooks, admin_create_webhook, admin_delete_webhook.

Undocumented routes

The tools below call routes that are in neither Smartsheet's Resource Management API reference (OpenAPI JSON) nor the archived 10,000ft API docs. There are 46 such method and path pairs. They are kept, and not re-pointed, because some documented equivalents take different request shapes, so moving a tool would change what it sends. Smartsheet may change or remove an undocumented route without notice, and each of these tools says so in its description. Prefer a tool on a documented route when one fits: for example, time_create_user_time_entry or time_create_project_time_entry instead of time_create_time_entry. Each of these client calls carries # drift-ignore: undocumented route, and scripts/check_openapi_drift.py fails on any other call that is not in the published spec.

ToolUndocumented routeDocumented equivalent
time_create_time_entryPOST /time_entriesPOST /users/{user_id}/time_entries (time_create_user_time_entry) and POST /projects/{project_id}/time_entries (time_create_project_time_entry).
time_update_time_entryPUT /time_entries/{id}PUT /users/{user_id}/time_entries/{id}.
time_delete_time_entryDELETE /time_entries/{id}DELETE /users/{user_id}/time_entries/{id}.
time_update_time_approval_statusPUT /users/{user_id}/time_entries/approval_statusNone found.
time_lock_timesheetPOST /users/{user_id}/time_entries/lockNone found.
time_fill_weekly_timesheetPOST /time_entriesPOST /users/{user_id}/time_entries.
time_confirm_suggested_hoursPUT /time_entries/{id}PUT /users/{user_id}/time_entries/{id}.
time_reconcile_and_submit_weekPUT /users/{user_id}/time_entries/approval_statusNone found (called only with auto_submit=True).
time_bulk_delete_time_entriesDELETE /time_entries/{id}DELETE /users/{user_id}/time_entries/{id}.
projects_get_project_phaseGET /projects/{project_id}/phases/{phase_id}The reference documents only PUT and DELETE on that path; GET /projects/{project_id}/phases lists phases.
admin_list_user_bill_ratesGET /users/{user_id}/bill_ratesGET /bill_rates and GET /projects/{project_id}/bill_rates.
admin_create_user_bill_ratePOST /users/{user_id}/bill_ratesThe reference documents bill rates only under /bill_rates and /projects/{project_id}/bill_rates, with no create.
admin_get_user_availabilityGET /users/{user_id}/availabilityGET /users/{user_id}/availabilities.
admin_get_user_utilizationGET /users/{user_id}/utilizationNone found.
admin_create_rolePOST /rolesThe reference documents only GET for roles.
admin_update_rolePUT /roles/{id}The reference documents only GET for roles.
admin_delete_roleDELETE /roles/{id}The reference documents only GET for roles.
admin_create_disciplinePOST /disciplinesThe reference documents only GET for disciplines.
admin_update_disciplinePUT /disciplines/{id}The reference documents only GET for disciplines.
admin_delete_disciplineDELETE /disciplines/{id}The reference documents only GET for disciplines.
admin_list_clientsGET /clientsNone found.
admin_get_clientGET /clients/{id}None found.
admin_create_clientPOST /clientsNone found.
admin_update_clientPUT /clients/{id}None found.
admin_delete_clientDELETE /clients/{id}None found.
admin_list_client_contactsGET /clients/{id}/contactsNone found.
admin_create_client_contactPOST /clients/{id}/contactsNone found.
admin_delete_client_contactDELETE /clients/{id}/contacts/{contact_id}None found.
admin_create_leave_typePOST /leave_typesThe reference documents only GET for leave types.
admin_update_leave_typePUT /leave_types/{id}The reference documents only GET for leave types.
admin_delete_leave_typeDELETE /leave_types/{id}The reference documents only GET for leave types.
admin_get_holidayGET /holidays/{id}The reference documents only GET /holidays.
admin_create_holidayPOST /holidaysThe reference documents only GET /holidays.
admin_update_holidayPUT /holidays/{id}The reference documents only GET /holidays.
admin_delete_holidayDELETE /holidays/{id}The reference documents only GET /holidays.
admin_list_expensesGET /expenses, GET /projects/{project_id}/expenses, GET /users/{user_id}/expensesGET /users/{user_id}/expense_items and GET /projects/{project_id}/expense_items.
admin_get_expenseGET /expenses/{id}GET /users/{user_id}/expense_items/{expense_item_id} and GET /projects/{project_id}/expense_items/{expense_item_id}.
admin_create_expensePOST /expensesPOST /users/{user_id}/expense_items.
admin_update_expensePUT /expenses/{id}PUT /users/{user_id}/expense_items/{expense_item_id}.
admin_delete_expenseDELETE /expenses/{id}DELETE /users/{user_id}/expense_items/{expense_item_id}.
admin_list_expense_categoriesGET /expense_categoriesGET /expense_item_categories.
admin_create_expense_categoryPOST /expense_categoriesThe reference documents only GET /expense_item_categories.
admin_delete_expense_categoryDELETE /expense_categories/{id}The reference documents only GET /expense_item_categories.
admin_list_tagsGET /tagsGET /projects/{project_id}/tags and GET /users/{user_id}/tags.
admin_create_tagPOST /tagsPOST /projects/{project_id}/tags and POST /users/{user_id}/tags.
admin_delete_tagDELETE /tags/{id}DELETE /projects/{project_id}/tags/{tag_id} and DELETE /users/{user_id}/tags/{tag_id}.
admin_list_custom_field_valuesGET /custom_field_valuesGET /projects/{project_id}/custom_field_values and GET /users/{user_id}/custom_field_values.
admin_set_custom_field_valuesPUT /custom_field_valuesPUT /projects/{project_id}/custom_field_values/{custom_field_value_id} and PUT /users/{user_id}/custom_field_values/{custom_field_value_id}.

🚀 Quickstart & Installation

1. Run via uvx

Console scripts in [project.scripts] both call smartsheet_rm_mcp.server:main: smartsheet-rm-mcp (used below) and mcp-server-smartsheet-rm. Install examples stay unpinned. To freeze a release, pin the version from Releases.

bash
uvx --from mcp-server-smartsheet-rm smartsheet-rm-mcp

After an upgrade, reload the MCP host so the live process start time is after the new binary mtime (stale process ≠ new package).

2. Installation

bash
# Using uv (recommended)uv pip install mcp-server-smartsheet-rm
# Or standard pippip install mcp-server-smartsheet-rm

3. Environment Variables

VariableDescriptionDefault
SMARTSHEET_RM_API_TOKENSmartsheet RM (10,000ft) API Token (Required)-
SMARTSHEET_RM_BASE_URLBase API URLhttps://api.rm.smartsheet.com/api/v1
SMARTSHEET_RM_PROFILEProfile: full, time, projects, admin, readonly, timesheets, staffing, org_setup, portfolio (see Profiles)full
SMARTSHEET_RM_READONLYSet to 1 to list only readOnlyHint=true tools and refuse every other call0
SMARTSHEET_RM_ALLOW_BULK_DESTRUCTIVESet to 1 to let the two listed bulk delete tools execute0
SMARTSHEET_RM_ENABLE_TOOL_SEARCHSet to 1 (or --enable-tool-search) for Tool Search on full0
SMARTSHEET_RM_TOOL_SEARCH_BACKENDTool Search backend: regex or bm25 (or --tool-search-backend)regex
SMARTSHEET_RM_ENABLE_CODE_MODESet to 1 (or --enable-code-mode) for experimental Code Mode on full; not with Tool Search0
SMARTSHEET_RM_MCP_AUTH_TOKENShared bearer token required on HTTP transports (stdio ignores it)unset
SMARTSHEET_RM_MCP_ALLOW_UNAUTHENTICATED_BINDSet to 1 to accept a tokenless HTTP bind to a non-localhost hostunset
SMARTSHEET_RM_LOG_FORMATSet to json for Datadog/CloudWatch structured logstext
SMARTSHEET_RM_ALLOWED_HOSTSComma-separated hostnames allowed for base URL overrides. A non-blank value replaces the default. Loopback and private targets stay blocked.api.rm.smartsheet.com
SMARTSHEET_RM_GOV_SMARTSHEET_API_TOKENSmartsheet API token for Smartsheet Gov only; sent as Authorization: Bearer and only to app.smartsheetgov.com (see Smartsheet Gov)unset
Smartsheet Gov

Smartsheet Gov is opt-in; the default base URL and allowlist do not change. Per Smartsheet's RM API Introduction and Authentication pages, the Gov base URL is https://app.smartsheetgov.com/2.0/rm/api/v1 and every request needs both the RM token in auth and a Smartsheet API token as Authorization: Bearer. To use it:

bash
export SMARTSHEET_RM_BASE_URL='https://app.smartsheetgov.com/2.0/rm/api/v1'export SMARTSHEET_RM_ALLOWED_HOSTS='app.smartsheetgov.com'export SMARTSHEET_RM_API_TOKEN='your_rm_api_token'export SMARTSHEET_RM_GOV_SMARTSHEET_API_TOKEN='your_smartsheet_api_token'

The Gov host goes through the same HTTPS, SSRF, allowlist and DNS-pinning checks as any other base URL. The client refuses to start against the Gov host without the Smartsheet token, and sends that token to no other host. On HTTP transports, a caller that sends its own auth or x-smartsheet-rm-token header must also send its own x-smartsheet-gov-api-token header; the environment Gov token is never paired with a caller's RM token.


💻 Client Configurations

Google Antigravity (~/.gemini/antigravity-cli/mcp_config.json)

json
{  "mcpServers": {    "smartsheet-rm": {      "command": "uvx",      "args": ["--from", "mcp-server-smartsheet-rm", "smartsheet-rm-mcp"],      "env": {        "SMARTSHEET_RM_API_TOKEN": "your-api-token"      },      "lazy": true    }  }}

Snowflake Cortex (~/.snowflake/cortex/mcp.json)

json
{  "servers": {    "smartsheet-rm": {      "command": "uvx",      "args": ["--from", "mcp-server-smartsheet-rm", "smartsheet-rm-mcp"],      "env": {        "SMARTSHEET_RM_API_TOKEN": "your-api-token"      }    }  }}

Claude Desktop (claude_desktop_config.json)

json
{  "mcpServers": {    "smartsheet-rm": {      "command": "uvx",      "args": ["--from", "mcp-server-smartsheet-rm", "smartsheet-rm-mcp"],      "env": {        "SMARTSHEET_RM_API_TOKEN": "your-api-token"      }    }  }}

Streamable HTTP

Prefer Streamable HTTP. --transport sse is deprecated (MCP spec SEP-2577); main() logs a migration warning and does not advertise /sse as the client path.

bash
uvx --from mcp-server-smartsheet-rm smartsheet-rm-mcp --transport streamable-http --host 127.0.0.1 --port 8000

Connect clients to http://127.0.0.1:8000/mcp (FastMCP's default Streamable HTTP path). run(transport="streamable-http") does not set a custom path. Binding to 0.0.0.0 or :: requires an explicit --allowed-host (a wildcard * is rejected).

In the default (stateful) HTTP mode, a session idle for 30 minutes expires: its next request gets HTTP 404 and the client must start a new session. Change this with FastMCP's session_idle_timeout (on http_app()) or FASTMCP_HTTP_SESSION_IDLE_TIMEOUT (seconds, or none to never expire); see the FastMCP 4.1.0 release and #5229.

HTTP authentication. Set SMARTSHEET_RM_MCP_AUTH_TOKEN to require Authorization: Bearer <token> on every HTTP request; a missing or wrong token gets 401. The token is stripped, and a blank value counts as unset. It is attached when the server is built, so smartsheet-rm-mcp, fastmcp run and an ASGI host mounting mcp.http_app() all enforce it. stdio never uses it.

With no token, an HTTP bind to 127.0.0.1, ::1 or localhost still starts, unauthenticated, and logs a warning. A tokenless bind to any other host exits with code 2. Set the token, bind to localhost, or set SMARTSHEET_RM_MCP_ALLOW_UNAUTHENTICATED_BIND to 1, true, yes or on to accept an unauthenticated public bind (any other value refuses). To serve the image over HTTP, pass the tokens from your environment or an env file, not on the command line:

bash
# export SMARTSHEET_RM_API_TOKEN and SMARTSHEET_RM_MCP_AUTH_TOKEN first, or use --env-file .envdocker run --rm -p 8000:8000 -e SMARTSHEET_RM_API_TOKEN -e SMARTSHEET_RM_MCP_AUTH_TOKEN \  ghcr.io/christianclaudio/mcp-server-smartsheet-rm:latest \  --transport streamable-http --host 0.0.0.0 --allowed-host localhost:8000

🛡️ Safety & Reliability

  • Secret Redaction: API tokens, bearer headers, and sensitive keys are automatically scrubbed from errors and logs.
  • Destructive Gates: Every deletion tool declares confirm: bool = False and makes no change unless the caller explicitly passes confirm=True. Without it the tool returns a normal result (isError: false) with "status": "confirmation_required" and a message to re-call with confirm=true; that is the designed two-step, not an error.
  • Input Validation: Missing or invalid arguments (for example an update with no fields, or a malformed date) return a tool error (isError: true, "type": "invalid_request") the model can correct, as the MCP spec describes for input validation errors.
  • Batch Results: time_fill_weekly_timesheet, time_confirm_suggested_hours, time_bulk_delete_time_entries and projects_bulk_delete_assignments share one shape: "status": "success" or "partial_success", a success count (filled_count / confirmed_count / deleted_count), failed_count, results and errors. Each success is {id|date, status, result}; each failure is {id|date, status: "failed", error} where error always has a message (API errors via to_dict(); other exceptions as "type": "internal" with a redacted message). The field names from earlier releases stay alongside: time_fill_weekly_timesheet also returns days_filled, created_count and entries (the created entries), and time_confirm_suggested_hours returns confirmed_entries. When every item fails, the call is a tool error (isError: true, "type": "batch_failed").
  • Profiles: Minimize token footprint by loading only the tools one job needs (timesheets, staffing, org_setup, portfolio) or one domain (time, projects, admin).
  • Read-Only Gate: readOnlyHint decides; anything else is refused with isError: true.
  • Resilience: Exponential backoff with randomized jitter on HTTP 429 rate limits.

🧪 Testing & Validation

bash
# Run tests with 100% coverage requirementpytest --cov=src/smartsheet_rm_mcp --cov-fail-under=100 -v
# Run Tool Contract verificationpython scripts/check_tool_contract.py
# Run OpenAPI Drift check against Smartsheet's published spec (or --spec-file for a local copy)python scripts/check_openapi_drift.py --spec-url https://developers.smartsheet.com/_spec/api/resource_management/openapi.json

来源:README.md,提交 7fb1f31

工具

104

time_list_time_entries

Time List Time Entries

List time entries across organization or filtered by project, user, or date range (YYYY-MM-DD).

输入参数pageto_dateuser_idper_pagefrom_dateproject_idwith_suggestions

time_get_time_entry

Time Get Time Entry

Get details for a specific time entry by its ID.

输入参数entry_id必填

time_create_time_entry

Time Create Time Entry

Create a new time entry for a user on a project (date format: YYYY-MM-DD). Undocumented route: `POST /time_entries` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented routes: `POST /users/{user_id}/time_entries` (time_create_user_time_entry) and `POST /projects/{project_id}/time_entries` (time_create_project_time_entry).

输入参数date必填hours必填notesuser_id必填phase_idproject_id必填is_billablecustom_field_values

time_create_user_time_entry

Time Create User Time Entry

Create a time entry for a user on the documented route `POST /users/{user_id}/time_entries`. assignable_id is the project, phase or leave type ID; date is YYYY-MM-DD. task, notes and bill_rate_id are optional; the reference limits task and notes to 256 characters. The body repeats user_id, which the reference says must match the URL.

输入参数date必填taskhours必填notesuser_id必填bill_rate_idassignable_id必填

time_create_project_time_entry

Time Create Project Time Entry

Create a time entry on a project on the documented route `POST /projects/{project_id}/time_entries`. date is YYYY-MM-DD. The body's assignable_id is project_id, which the reference says must match the URL; to log time to a phase or leave type, use time_create_user_time_entry. task, notes and bill_rate_id are optional; the reference limits task and notes to 256 characters.

输入参数date必填taskhours必填notesuser_id必填project_id必填bill_rate_id

time_update_time_entry

Time Update Time Entry

Update an existing time entry. Undocumented route: `PUT /time_entries/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented route: `PUT /users/{user_id}/time_entries/{id}`.

输入参数datehoursnotesentry_id必填is_billable

time_delete_time_entry

Time Delete Time Entry

Delete a time entry (Destructive: requires confirm=True). Undocumented route: `DELETE /time_entries/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented route: `DELETE /users/{user_id}/time_entries/{id}`.

输入参数confirmentry_id必填

time_list_user_suggestions

Time List User Suggestions

Read unconfirmed scheduled time suggestions for a user.

输入参数to_dateuser_id必填from_date

time_update_time_approval_status

Time Update Time Approval Status

Approve or reject time entries for a user (status: 'approved', 'rejected', 'pending'). Undocumented route: `PUT /users/{user_id}/time_entries/approval_status` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. No documented equivalent was found.

输入参数status必填user_id必填entry_ids必填approver_notes

time_lock_timesheet

Time Lock Timesheet

Lock or unlock timesheet records for a user up to a specified lock date (YYYY-MM-DD). Undocumented route: `POST /users/{user_id}/time_entries/lock` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. No documented equivalent was found.

输入参数unlockuser_id必填lock_date必填

time_fill_weekly_timesheet

Time Fill Weekly Timesheet

Batch-fill weekly timesheet entries (Mon-Fri 8h default, or 7-day with include_weekends=True) for a user. start_date: Monday date of the week in YYYY-MM-DD. include_weekends: When True, logs Saturday and Sunday entries as well. weekend_hours: Specific hours for Saturday/Sunday (defaults to daily_hours if omitted). Undocumented route: `POST /time_entries` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Each entry is created there. Documented route: `POST /users/{user_id}/time_entries`.

输入参数notesuser_id必填project_idstart_date必填daily_hoursweekend_hoursinclude_weekends

time_confirm_suggested_hours

Time Confirm Suggested Hours

Auto-confirm all unconfirmed scheduled suggestions for a user within a date range. Undocumented route: `PUT /time_entries/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Each suggestion is confirmed there. Documented route: `PUT /users/{user_id}/time_entries/{id}`.

输入参数to_date必填user_id必填from_date必填

time_reconcile_and_submit_week

Time Reconcile And Submit Week

Audit weekly logged hours against a target (40h) and optionally submit/approve timesheet. Undocumented route: `PUT /users/{user_id}/time_entries/approval_status` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Only auto_submit=True calls it. No documented equivalent was found.

输入参数user_id必填start_date必填auto_submittarget_hours

time_bulk_delete_time_entries

Time Bulk Delete Time Entries

Bulk delete multiple time entries (Destructive: gated by SMARTSHEET_RM_ALLOW_BULK_DESTRUCTIVE=1 and confirm=True). Undocumented route: `DELETE /time_entries/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented route: `DELETE /users/{user_id}/time_entries/{id}`.

输入参数confirmentry_ids必填

time_list_approvals

Time List Approvals

List submitted time entry and expense approvals across the organization.

输入参数pageper_page

time_create_approval

Time Create Approval

Submit or approve approvable records (approvable_type: 'time_entries' or 'expense_items').

输入参数notesstatusapprovable_ids必填approvable_type必填

time_delete_approval

Time Delete Approval

Delete a pending approval record (Destructive: requires confirm=True).

输入参数confirmapproval_id必填

projects_list_projects

Projects List Projects

List projects in Smartsheet RM with filtering, phase inclusion, and pagination.

输入参数pagearchivedper_pagesort_fieldsort_orderwith_phasesfilter_fieldfilter_value

projects_get_project

Projects Get Project

Get project details including budget, phases, client, and dates.

输入参数project_id必填with_phases

projects_create_project

Projects Create Project

Create a new project in Smartsheet RM.

输入参数name必填budgetsecureend_dateclient_idstart_datebudget_typedescriptionproject_typeproject_state

projects_update_project

Projects Update Project

Update project metadata, state, dates, budget or archive status.

输入参数namebudgetarchivedend_dateproject_id必填start_datebudget_typedescriptionproject_state

projects_delete_project

Projects Delete Project

Delete a project (Destructive: requires confirm=True).

输入参数confirmproject_id必填

projects_list_project_users

Projects List Project Users

List users associated with or assigned to a specific project.

输入参数pageper_pageproject_id必填

projects_list_project_phases

Projects List Project Phases

List phases belonging to a project.

输入参数project_id必填

projects_get_project_phase

Projects Get Project Phase

Get details for a specific project phase. Undocumented route: `GET /projects/{project_id}/phases/{phase_id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only PUT and DELETE on that path; `GET /projects/{project_id}/phases` lists phases.

输入参数phase_id必填project_id必填

projects_create_project_phase

Projects Create Project Phase

Create a new phase under a project.

输入参数name必填budgetend_date必填project_id必填start_date必填description

projects_update_project_phase

Projects Update Project Phase

Update an existing project phase.

输入参数namebudgetend_datephase_id必填project_id必填start_datedescription

projects_delete_project_phase

Projects Delete Project Phase

Delete a project phase (Destructive: requires confirm=True).

输入参数confirmphase_id必填project_id必填

projects_list_assignments

Projects List Assignments

List resource scheduling assignments across projects or filtered by user/project.

输入参数pageto_dateuser_idper_pagefrom_dateproject_id

projects_get_assignment

Projects Get Assignment

Get details for a specific assignment.

输入参数assignment_id必填

projects_create_assignment

Projects Create Assignment

Create a resource assignment on a project or phase (dates: YYYY-MM-DD).

输入参数notepercentuser_id必填end_date必填phase_idproject_id必填start_date必填fixed_hourshours_per_dayallocation_mode

projects_create_project_assignment

Projects Create Project Assignment

Assign a user to a project on the documented route `POST /projects/{project_id}/assignments` (dates: YYYY-MM-DD). Set allocation_mode and the matching value: percent (the reference documents it as a fraction from 0 to 1), hours_per_day, or fixed_hours for the fixed mode. allocation_mode is sent as given, because the reference names the fixed mode `fixed` in its description and `fixed_hours` in its schema. Percent mode is the default and requires percent; hours_per_day and the fixed mode require hours_per_day and fixed_hours. Without the matching value the call is refused before any request.

输入参数percentuser_id必填end_date必填project_id必填start_date必填descriptionfixed_hoursbill_rate_idhours_per_dayallocation_modestatus_option_id

projects_create_user_assignment

Projects Create User Assignment

Assign a user to a project, phase or leave type on the documented route `POST /users/{user_id}/assignments` (dates: YYYY-MM-DD). assignable_id is the project, phase or leave type ID. Set allocation_mode and the matching value: percent (the reference documents it as a fraction from 0 to 1), hours_per_day, or fixed_hours for the fixed mode. allocation_mode is sent as given, because the reference names the fixed mode `fixed` in its description and `fixed_hours` in its schema. Percent mode is the default and requires percent; hours_per_day and the fixed mode require hours_per_day and fixed_hours. Without the matching value the call is refused before any request.

输入参数percentuser_id必填end_date必填start_date必填descriptionfixed_hoursbill_rate_idassignable_id必填hours_per_dayallocation_modestatus_option_id

projects_update_assignment

Projects Update Assignment

Update dates, allocation percentage, or hours on an existing assignment.

输入参数notepercentend_datestart_datefixed_hoursassignment_id必填hours_per_day

projects_delete_assignment

Projects Delete Assignment

Delete a resource assignment (Destructive: requires confirm=True).

输入参数confirmassignment_id必填

projects_clone_project_schedule

Projects Clone Project Schedule

Duplicate project budget settings, timeline, and phase milestone structure to a new project.

输入参数client_idnew_start_datesource_project_id必填target_project_name必填

projects_bulk_delete_assignments

Projects Bulk Delete Assignments

Bulk delete multiple resource assignments (Destructive: gated by SMARTSHEET_RM_ALLOW_BULK_DESTRUCTIVE=1 and confirm=True).

输入参数confirmassignment_ids必填

projects_list_status_options

Projects List Status Options

List account-level assignment work status options.

无需输入参数。

projects_list_placeholder_resources

Projects List Placeholder Resources

List placeholder resources used for forecasting and capacity modeling.

输入参数pageper_page

projects_create_placeholder_resource

Projects Create Placeholder Resource

Create a placeholder resource.

输入参数roletitle必填locationdiscipline

projects_delete_placeholder_resource

Projects Delete Placeholder Resource

Delete a placeholder resource (Destructive: requires confirm=True).

输入参数confirmplaceholder_id必填

projects_list_assignment_subtasks

Projects List Assignment Subtasks

List subtasks (checklist tasks) for a project assignment.

输入参数project_id必填assignment_id必填

projects_create_assignment_subtask

Projects Create Assignment Subtask

Create a subtask under a project assignment.

输入参数completedproject_id必填description必填assignment_id必填

projects_delete_assignment_subtask

Projects Delete Assignment Subtask

Delete an assignment subtask (Destructive: requires confirm=True).

输入参数confirmproject_id必填subtask_id必填assignment_id必填

admin_list_users

Admin List Users

List users in the organization with role/discipline filtering.

输入参数pagerolearchivedper_pagedisciplineinclude_billability

admin_get_user

Admin Get User

Get details for a specific user.

输入参数user_id必填

admin_create_user

Admin Create User

Create a new user profile in Smartsheet RM.

输入参数roleemail必填locationbill_ratecost_ratelast_name必填disciplinefirst_name必填user_type_idbillability_target

admin_update_user

Admin Update User

Update a user's profile, role, discipline, bill rate, or archive state.

输入参数roleemailuser_id必填archivedbill_ratecost_ratelast_namedisciplinefirst_namebillability_target

admin_delete_user

Admin Delete User

Delete or archive a user (Destructive: requires confirm=True).

输入参数confirmuser_id必填

admin_list_user_bill_rates

Admin List User Bill Rates

List bill rate tiers for a user. Undocumented route: `GET /users/{user_id}/bill_rates` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented routes: `GET /bill_rates` and `GET /projects/{project_id}/bill_rates`.

输入参数user_id必填

admin_create_user_bill_rate

Admin Create User Bill Rate

Add a bill rate tier with an effective date range for a user. Undocumented route: `POST /users/{user_id}/bill_rates` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents bill rates only under `/bill_rates` and `/projects/{project_id}/bill_rates`, with no create.

输入参数rate必填user_id必填end_datestart_date必填

admin_get_user_availability

Admin Get User Availability

Query scheduled hours vs available capacity for a user. Undocumented route: `GET /users/{user_id}/availability` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented route: `GET /users/{user_id}/availabilities`.

输入参数to_dateuser_id必填from_date

admin_get_user_utilization

Admin Get User Utilization

Get billable utilization metrics for a user. Undocumented route: `GET /users/{user_id}/utilization` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. No documented equivalent was found.

输入参数to_dateuser_id必填from_date

admin_list_roles

Admin List Roles

List all configured user roles.

无需输入参数。

admin_create_role

Admin Create Role

Create a new role. Undocumented route: `POST /roles` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only GET for roles.

输入参数name必填

admin_update_role

Admin Update Role

Update an existing role. Undocumented route: `PUT /roles/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only GET for roles.

输入参数name必填role_id必填

admin_delete_role

Admin Delete Role

Delete a role (Destructive: requires confirm=True). Undocumented route: `DELETE /roles/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only GET for roles.

输入参数confirmrole_id必填

admin_list_disciplines

Admin List Disciplines

List all configured disciplines.

无需输入参数。

admin_create_discipline

Admin Create Discipline

Create a new discipline. Undocumented route: `POST /disciplines` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only GET for disciplines.

输入参数name必填

admin_update_discipline

Admin Update Discipline

Update an existing discipline. Undocumented route: `PUT /disciplines/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only GET for disciplines.

输入参数name必填discipline_id必填

admin_delete_discipline

Admin Delete Discipline

Delete a discipline (Destructive: requires confirm=True). Undocumented route: `DELETE /disciplines/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only GET for disciplines.

输入参数confirmdiscipline_id必填

admin_list_clients

Admin List Clients

List clients. Undocumented route: `GET /clients` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. No documented equivalent was found.

输入参数pagearchivedper_page

admin_get_client

Admin Get Client

Get details for a specific client. Undocumented route: `GET /clients/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. No documented equivalent was found.

输入参数client_id必填

admin_create_client

Admin Create Client

Create a new client record. Undocumented route: `POST /clients` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. No documented equivalent was found.

输入参数cityname必填stateaddresscountryzipcode

admin_update_client

Admin Update Client

Update a client record. Undocumented route: `PUT /clients/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. No documented equivalent was found.

输入参数citynamestateaddresscountryzipcodearchivedclient_id必填

admin_delete_client

Admin Delete Client

Delete a client record (Destructive: requires confirm=True). Undocumented route: `DELETE /clients/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. No documented equivalent was found.

输入参数confirmclient_id必填

admin_list_client_contacts

Admin List Client Contacts

List contacts associated with a client. Undocumented route: `GET /clients/{id}/contacts` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. No documented equivalent was found.

输入参数client_id必填

admin_create_client_contact

Admin Create Client Contact

Add a contact for a client. Undocumented route: `POST /clients/{id}/contacts` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. No documented equivalent was found.

输入参数emailphonetitleclient_id必填last_name必填first_name必填

admin_delete_client_contact

Admin Delete Client Contact

Delete a client contact (Destructive: requires confirm=True). Undocumented route: `DELETE /clients/{id}/contacts/{contact_id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. No documented equivalent was found.

输入参数confirmclient_id必填contact_id必填

admin_list_leave_types

Admin List Leave Types

List leave types (e.g. Vacation, Sick, Parental, PTO).

无需输入参数。

admin_get_leave_type

Admin Get Leave Type

Get details for a specific leave type.

输入参数leave_type_id必填

admin_create_leave_type

Admin Create Leave Type

Create a new leave type. Undocumented route: `POST /leave_types` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only GET for leave types.

输入参数name必填

admin_update_leave_type

Admin Update Leave Type

Update a leave type name. Undocumented route: `PUT /leave_types/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only GET for leave types.

输入参数name必填leave_type_id必填

admin_delete_leave_type

Admin Delete Leave Type

Delete a leave type (Destructive: requires confirm=True). Undocumented route: `DELETE /leave_types/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only GET for leave types.

输入参数confirmleave_type_id必填

admin_list_holidays

Admin List Holidays

List company and regional holidays.

输入参数to_datefrom_date

admin_get_holiday

Admin Get Holiday

Get details for a specific holiday. Undocumented route: `GET /holidays/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only `GET /holidays`.

输入参数holiday_id必填

admin_create_holiday

Admin Create Holiday

Create a new company holiday or non-working day. Undocumented route: `POST /holidays` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only `GET /holidays`.

输入参数date必填name必填end_date

admin_update_holiday

Admin Update Holiday

Update a holiday. Undocumented route: `PUT /holidays/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only `GET /holidays`.

输入参数datenameend_dateholiday_id必填

admin_delete_holiday

Admin Delete Holiday

Delete a holiday (Destructive: requires confirm=True). Undocumented route: `DELETE /holidays/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only `GET /holidays`.

输入参数confirmholiday_id必填

admin_list_expenses

Admin List Expenses

List logged expenses across projects or filtered by project/user. Undocumented route: `GET /expenses`, `GET /projects/{project_id}/expenses`, `GET /users/{user_id}/expenses` are not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove them without notice. Documented routes: `GET /users/{user_id}/expense_items` and `GET /projects/{project_id}/expense_items`.

输入参数pageto_dateuser_idper_pagefrom_dateproject_id

admin_get_expense

Admin Get Expense

Get details for a specific logged expense. Undocumented route: `GET /expenses/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented routes: `GET /users/{user_id}/expense_items/{expense_item_id}` and `GET /projects/{project_id}/expense_items/{expense_item_id}`.

输入参数expense_id必填

admin_create_expense

Admin Create Expense

Log a project expense item. Undocumented route: `POST /expenses` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented route: `POST /users/{user_id}/expense_items`.

输入参数date必填notesamount必填user_id必填project_id必填is_billableexpense_category_id必填

admin_update_expense

Admin Update Expense

Update a logged expense item. Undocumented route: `PUT /expenses/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented route: `PUT /users/{user_id}/expense_items/{expense_item_id}`.

输入参数datenotesamountexpense_id必填is_billable

admin_delete_expense

Admin Delete Expense

Delete an expense item (Destructive: requires confirm=True). Undocumented route: `DELETE /expenses/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented route: `DELETE /users/{user_id}/expense_items/{expense_item_id}`.

输入参数confirmexpense_id必填

admin_list_expense_categories

Admin List Expense Categories

List configured expense categories. Undocumented route: `GET /expense_categories` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented route: `GET /expense_item_categories`.

无需输入参数。

admin_create_expense_category

Admin Create Expense Category

Create an expense category. Undocumented route: `POST /expense_categories` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only `GET /expense_item_categories`.

输入参数name必填

admin_delete_expense_category

Admin Delete Expense Category

Delete an expense category (Destructive: requires confirm=True). Undocumented route: `DELETE /expense_categories/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. The reference documents only `GET /expense_item_categories`.

输入参数confirmcategory_id必填

admin_list_tags

Admin List Tags

List tags. Undocumented route: `GET /tags` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented routes: `GET /projects/{project_id}/tags` and `GET /users/{user_id}/tags`.

输入参数pageper_page

admin_create_tag

Admin Create Tag

Create a tag. Undocumented route: `POST /tags` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented routes: `POST /projects/{project_id}/tags` and `POST /users/{user_id}/tags`.

输入参数name必填

admin_delete_tag

Admin Delete Tag

Delete a tag (Destructive: requires confirm=True). Undocumented route: `DELETE /tags/{id}` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented routes: `DELETE /projects/{project_id}/tags/{tag_id}` and `DELETE /users/{user_id}/tags/{tag_id}`.

输入参数tag_id必填confirm

admin_list_custom_fields

Admin List Custom Fields

List custom field definitions.

无需输入参数。

admin_get_custom_field

Admin Get Custom Field

Get details of a custom field definition.

输入参数custom_field_id必填

admin_create_custom_field

Admin Create Custom Field

Create a custom field definition (field_type: text, number, select, date; target_type: Project, User, Phase).

输入参数name必填optionsfield_type必填target_type必填

admin_update_custom_field

Admin Update Custom Field

Update a custom field definition.

输入参数nameoptionscustom_field_id必填

admin_delete_custom_field

Admin Delete Custom Field

Delete a custom field definition (Destructive: requires confirm=True).

输入参数confirmcustom_field_id必填

admin_list_custom_field_values

Admin List Custom Field Values

List custom field values, optionally filtered to one entity by target_id and target_type. Undocumented route: `GET /custom_field_values` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented routes: `GET /projects/{project_id}/custom_field_values` and `GET /users/{user_id}/custom_field_values`.

输入参数target_idtarget_type

admin_set_custom_field_values

Admin Set Custom Field Values

Set custom field values for an entity. Undocumented route: `PUT /custom_field_values` is not in Smartsheet's Resource Management API reference or the archived 10,000ft API docs, so Smartsheet may change or remove it without notice. Documented routes: `PUT /projects/{project_id}/custom_field_values/{custom_field_value_id}` and `PUT /users/{user_id}/custom_field_values/{custom_field_value_id}`.

输入参数values必填target_id必填target_type必填

admin_get_user_statuses

Admin Get User Statuses

Retrieve work status history for a specific user (ITO, WFH, SIC, OOO, VAC, OOF).

输入参数user_id必填

admin_set_user_status

Admin Set User Status

Set current working status for a user (status: 'ITO', 'WFH', 'SIC', 'OOO', 'VAC', 'OOF').

输入参数notesstatus必填user_id必填

admin_get_report_rows

Admin Get Report Rows

Generate detailed custom report rows.

输入参数report_parameters必填

admin_get_report_totals

Admin Get Report Totals

Generate aggregated custom report totals.

输入参数report_parameters必填

admin_list_webhooks

Admin List Webhooks

List configured organization webhooks.

无需输入参数。

admin_create_webhook

Admin Create Webhook

Register a webhook subscription (e.g. 'time.entry.created', 'project.updated', 'assignment.created').

输入参数event_type必填callback_url必填

admin_delete_webhook

Admin Delete Webhook

Delete a webhook subscription (Destructive: requires confirm=True).

输入参数confirmwebhook_id必填

版本历史

11
  1. v2.2.0最新Oct 30, 2026
  2. v2.1.1Oct 23, 2026
  3. v2.1.0Oct 21, 2026
  4. v2.0.4Oct 18, 2026
  5. v2.0.3Oct 16, 2026
  6. v2.0.2Oct 10, 2026
  7. v2.0.1Oct 9, 2026
  8. v2.0.0Oct 9, 2026
  9. v1.2.2Oct 2, 2026
  10. v1.2.1Sep 27, 2026
  11. v1.1.5Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分