Livespace CRM MCP Server

io.github.proAutomator由 GitHub 账号 proAutomator 发布v0.1.2更新于 Nov 2, 2026

Unofficial local MCP server for Livespace CRM with read tools and guarded writes.

已验证STDIO仅桌面数据与分析商业与电商

概览

AI 生成的概览

非官方的 Livespace CRM 本地 MCP 服务器,让助手搜索、读取和分析 CRM 记录,并可选用受保护的写入工具。

可以做什么
  • 检查服务器健康状态,并加载流程、用户、群组、来源、产品等 CRM 字典
  • 搜索个人、公司和商机,读取单条记录或记录墙
  • 读取 CRM 动态流和任务分页,并在限定窗口内运行指定聚合分析
  • 创建和更新个人、公司、商机和任务,支持批量预览与逐项结果
  • 记录公开备注和电话、在流程阶段间移动商机,并发送站内通知
适用场景
当助手需要操作 Livespace CRM 工作区时使用:查询联系人和商机、汇总动态,或进行受控的记录变更。建议先在测试账号上以只读模式评估,再接入业务数据。
运行要求
以本地 Streamable HTTP 服务运行(默认在回环地址 3020 端口),需要 Bun 1.3.14 或更高版本,不需要 Node.js。需要开通 API 访问的 Livespace 套餐、工作区子域名,以及专用 API 用户的 API key 和 secret。启用写入或绑定非回环地址时需要 bearer token,启用写入时还需独立的签名密钥。
安装前请注意
需要 Livespace API 凭据,写入时还需 bearer token 和签名密钥;请保护 .env 文件且不要提交到版本库。写入工具默认关闭,可创建、更新、记录备注、移动商机并发送通知;向后移动阶段会改变历史勾选项的含义。CRM 内容属于不可信数据,宿主或模型提供方可能留存。进程本身不终止 TLS,且该项目为非官方项目,与 Livespace 无隶属关系。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Livespace CRM MCP Server,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

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

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Livespace CRM MCP Server

Unofficial MCP server for Livespace CRM. It exposes 11 intent-shaped tools instead of mirroring the raw API and targets the stateless Streamable HTTP transport in MCP spec 2026-07-28.

Version 0.1.3 is available on npm, in the official MCP Registry, and as a GitHub Release.

The v1 implementation is complete in this repository. It has six read tools and five optional write tools, read-only defaults, bounded API access, sanitized errors and an elicitation-first confirmation flow. Use a test Livespace account while evaluating it.

Why this shape?

Livespace's RPC API has about 80 methods, but it does not provide sorting, aggregation or a direct operation for setting a deal stage. The server groups those lower-level calls into tasks an MCP client can use safely:

  • discovery before IDs are used;
  • bounded search, record reads and analysis;
  • batch previews before writes;
  • per-item outcomes and post-write checks;
  • explicit handling of Livespace-specific stage moves and notifications.

Tools

ToolModePurpose and bound
healthReadChecks the server; checkLivespace: true also makes one lightweight Livespace API call.
crm_metadataReadReturns nine dictionary sections, including processes, users, groups, sources, task dictionaries, products and the current user. Optional userQuery filters users by name or email before the 500-row cap.
search_crmReadFinds persons, companies or deals, with record links even in lightweight results. Sorted deal searches use one 200-record sort window and report truncation.
get_recordsReadReads one record kind and up to 25 ids; walls for at most 5 persons, companies or deals.
get_activityReadReads one record wall, one bounded CRM feed range or bounded task pages per call.
analyzeReadRuns one named aggregation over bounded windows and reports whether its source window was truncated.
create_recordsWriteCreates persons, companies, deals or tasks. Up to 10 items per call, with exact-match contact deduplication by default.
update_recordsWriteUpdates persons, companies, deals or tasks. Up to 10 items per call.
log_activitiesWriteAdds public notes or phone calls. Up to 15 notes or calls per call.
move_deals_to_stageWriteMoves deals by applying the minimal process-step diff. Up to 10 items per call; backward moves need an explicit allowlist.
notify_userWriteDispatches one in-app notification, limited to 5 per 10 minutes and 1 per recipient per minute.

move_deals_to_stage works by checking and unchecking process steps because Livespace has no "set stage" call. A deal stands at its furthest checked step. A backward move therefore unchecks completed steps and can change the historical meaning of those checkboxes.

notify_user validates the recipient and can add a deep link to a record. Livespace provides no notification read-back, so the tool reports a successful request as dispatched, never as delivered.

Requirements

  • A Livespace plan with API access, currently Automation or higher.
  • One Livespace API key and secret from Account settings -> API -> Users. Use a dedicated Livespace API user with only the permissions this MCP needs. Every API operation inherits that user's permissions.
  • Bun 1.3.14 or newer (bun.sh). The current server uses Bun.serve and has no Node.js or Cloudflare Workers adapter.

The v1 deployment model is single-user: one Livespace credential pair and, if enabled, one MCP bearer token protects the server. There is no OAuth or multi-user credential routing.

Install and run from npm

The package is distributed through npm's public registry, but Bun is its runtime. You do not need Node.js or the npm CLI to run it.

For a first evaluation, create a private working directory outside a Git repository. Add a .env file there with your own Livespace credentials:

dotenv
LIVESPACE_SUBDOMAIN=LIVESPACE_API_KEY=LIVESPACE_API_SECRET=

Fill the three empty values, protect the file, then start the published package:

bash
chmod 600 .envbunx livespace-crm-mcp

The default endpoint is http://127.0.0.1:3020/mcp. Keep the process running while your MCP client is connected. Start in read-only mode, call health, then use crm_metadata before any operation that needs a user, process, stage, group or dictionary ID.

bunx downloads the package from npm and caches it locally. To pin this release, run bunx [email protected].

Connect an MCP client

Configure a client that supports Streamable HTTP with this server URL:

json
{  "url": "http://127.0.0.1:3020/mcp"}

The exact configuration field differs between clients. Set MCP_AUTH_TOKEN and configure the client to send Authorization: Bearer <your-token>, even on loopback. Authentication is mandatory when write tools are enabled.

This package exposes Streamable HTTP, not stdio. Some MCP clients can connect to the local URL but cannot launch bunx for you, so start the command in a separate terminal. Clients that accept only stdio are not supported yet. Each HTTP request must contain one JSON-RPC message; top-level batch arrays are rejected before dispatch.

Read results

Record data goes in structuredContent, with a short text summary. Check that your host passes both channels to its model. Empty search_crm and get_activity pages include the same hint in both channels; follow a returned cursor before concluding that no records match. An empty crm_metadata user search also carries a hint in both channels. See the host compatibility checks for tested versions, confirmation limits and a synthetic fixture you can run without CRM access.

Use crm_metadata with userQuery to find a user by part of their name or email. For example, {"userQuery":"[email protected]"} returns only the users section. The query must have 2-100 characters after trimming. Matching ignores case but preserves accents; it does not search team names. If you supply sections, it must include users; other requested sections remain unfiltered. Omitting the query preserves the usual section selection.

The tool returns all matching users up to 500, in dictionary order. Resolve multiple matches before choosing an owner or write recipient. totalItems counts matches in the cached dictionary before that cap. Check asOf, ageMs and stale, especially when a user is missing from the results.

Phrase-search links are generated locally from the API ID, without a separate check of each destination. An unusable ID produces an empty url. Record reads and filtered searches retain the URL supplied by Livespace, including at detail: "minimal" for persons, companies and deals; that URL can also be empty. Tasks have no record URL.

Fields excluded by detail are omitted. An empty or null returned value means the response supplies no value; it does not establish an empty CRM field or an access restriction. For deal value and probability, distinguish numeric zero from null. A zero budget alone does not show whether someone set it intentionally. Some counters and flags normalize missing data to zero or false, so those defaults do not prove an explicitly stored value.

Deal value comes from whichever field the account fills. Accounts that use budget lines keep the line sum in value. Other accounts report value: 0 on every deal and keep the value shown in the UI in value_final. The server returns a non-zero value_final when there is one and value otherwise, so search_crm, get_records and analyze agree with the UI on both kinds of account.

At detail: "full", deals also carry checkedSteps (the process steps marked done, with stage and step ids and names) and the won, lost and outdated reason names and notes. A reopened deal can keep an earlier lost reason, so check status first. search_crm filters accept createdFrom and createdTo for persons, companies and deals, and modifiedFrom for deals, all as inclusive YYYY-MM-DD dates. Livespace ignores a date it cannot read and returns every record, so the server rejects invalid dates before calling it. The deal status filter takes open (the default), won, lost, outdated or all.

All tools reject unsupported input parameters. Correct the arguments when the client reports an input validation error.

Configuration

VariablePurpose
LIVESPACE_SUBDOMAINAccount subdomain without protocol or .livespace.io.
LIVESPACE_API_KEY / LIVESPACE_API_SECRETCredentials for one Livespace user.
MCP_PORTServer port. Default: 3020.
MCP_BIND_HOSTBind address. Default: 127.0.0.1.
MCP_AUTH_TOKENRandom bearer token of at least 32 bytes. Required for writes and on a non-loopback bind; recommended for every server.
LIVESPACE_MCP_ENABLE_WRITESSet to true to expose write tools. Default: false.
LIVESPACE_MCP_READ_ONLYEmergency kill-switch. true removes and blocks write tools even when enabled above.
MCP_REQUEST_STATE_KEYIndependent random secret of at least 32 bytes used to sign write confirmations. Required when writes are enabled.
MCP_ALLOW_UNBOUND_WRITE_CONFIRMATIONUnsafe compatibility mode for clients without form elicitation. Default: false.
MCP_ALLOWED_HOSTSHost-header allowlist for DNS-rebinding protection. Required on a non-loopback bind.
MCP_ALLOWED_ORIGIN_HOSTNAMESOptional additional browser-origin hostnames. On a non-loopback bind it defaults to MCP_ALLOWED_HOSTS.
MCP_RATE_LIMIT_PER_MINUTE / MCP_RATE_LIMIT_BURSTPer-principal request rate. Defaults: 120 per minute and burst 30.
MCP_MAX_CONCURRENT_REQUESTS / MCP_MAX_QUEUED_REQUESTSAdmission limits. Defaults: 8 in flight and 16 queued.
MCP_REQUEST_INGRESS_TIMEOUT_MSAbsolute limit for admission queueing plus body upload, not tool execution. Default: 10000; maximum: 60000.
MCP_REQUEST_EXECUTION_TIMEOUT_MSAbsolute limit for tool execution after upload. Default: 90000; maximum: 180000 (300000 before 0.1.2; a higher value now stops startup). The HTTP idle timeout follows both limits.

The server refuses a non-loopback bind unless MCP_AUTH_TOKEN and MCP_ALLOWED_HOSTS are set. It also refuses to enable writes without both MCP_AUTH_TOKEN and MCP_REQUEST_STATE_KEY. Once MCP_AUTH_TOKEN is configured, every /mcp request needs that Bearer token, including on loopback. Host and Origin checks run before the MCP handler.

Generate independent values for MCP_AUTH_TOKEN and MCP_REQUEST_STATE_KEY by running openssl rand -hex 32 twice. Do not reuse a Livespace credential.

The Bun process does not terminate TLS. Put a TLS-capable reverse proxy in front of every network-exposed deployment. The server reads credentials from environment variables, commonly through Bun's .env loading; protecting .env at rest is the operator's responsibility. Never commit it. The smoke script can also read the sandbox credentials from the macOS Keychain.

Write safety

The normal flow is elicitation-first:

  1. dryRun: true builds a plan without writing or requesting approval.
  2. On a client with form elicitation, a call without dryRun: true asks a human to approve the plan before execution. A confirm: true argument cannot bypass this prompt.
  3. The confirmation exchange uses a signed requestState that is valid for five minutes and consumed after an accepted or declined response. It is bound to the authenticated principal when present, the tool, arguments and preview.
  4. If the relevant records changed before approval, the tool returns recordsChanged: true, writes nothing and presents a fresh plan.

Write execution is disabled by default on clients without form elicitation. Those clients can preview, but confirm: true is refused. An operator can set MCP_ALLOW_UNBOUND_WRITE_CONFIRMATION=true for compatibility. In that mode, confirm: true executes without signed proof that a human saw the preview.

Results distinguish these cases:

  • verification: verified means the server re-read comparable fields after the write.
  • A successful write can still report verification: unavailable when a follow-up read failed, no sent field had an independent comparator or the upstream API exposes no read-back. Inspect that item's error and re-read the record where possible; do not retry the write.
  • unknown_outcome means the request may or may not have landed. Never retry it blindly.
  • not_attempted means that item was not sent, usually because a time budget expired or an earlier item hit the upstream rate limit. Those unsent items can be submitted later; follow the error hint for the rate-limited item.

Notification success is reported as dispatched, never as delivered. If delivery matters, confirm it by another channel instead of sending a duplicate notification.

Security and privacy

CRM names, notes, imported e-mails, task text and wall entries are untrusted data. The server never evaluates them as instructions, but the MCP host and model can still be influenced by their contents. Keep writes disabled unless the client provides a human confirmation flow. Fetch only the records and detail level needed for the task.

Tool responses can be retained by the MCP host, model provider or local client logs. Choose a host whose storage, training and retention policy fits the CRM data you process. This server stores no CRM records on disk and sends no telemetry, but it cannot control what the host does after receiving a result.

Use a dedicated Livespace API user rather than an administrator's key. Give it the smallest useful record and write permissions. Evaluate the MCP against a separate test account before connecting it to business data.

For a reverse proxy, terminate TLS, disable caching and do not log MCP request or response bodies. The server sets Cache-Control: no-store and Vary: Authorization, but proxy policy must preserve those protections.

Incident response

If a Livespace key, bearer token or confirmation key may be compromised:

  1. Stop the MCP server.
  2. Immediately revoke the Livespace API key and issue a replacement for the dedicated API user.
  3. Generate new, independent MCP_AUTH_TOKEN and MCP_REQUEST_STATE_KEY values.
  4. Restart the server and update the MCP client's Bearer header.
  5. Review Livespace's record and activity history for unexpected writes. Do not retry any operation that previously returned unknown_outcome.

v1 limits

  • No delete or merge operations.
  • No tag or custom-field writes in v1. Livespace documents tag changes through tag_add and tag_remove, and custom fields through dataset. Tag writes still need a sandbox probe using those exact keys. Custom-field writes cannot be verified until the sandbox has fields covering the supported types, including answer ids for select fields.
  • Tasks created here cannot be linked to records. Livespace's Todo/addTodo documentation describes links through todo.objects, but our sandbox probe returned success and echoed the submitted link while a fresh read returned objects: []. The exact raw probe payload was not retained, so the result is inconclusive. The server omits objects from task writes until a controlled probe confirms that the link persists. Existing links returned by Livespace are still exposed as linkedRecords.
  • Logged notes and calls cannot be edited or removed.
  • Deal updates cover name and status (open, won or lost); stage changes use move_deals_to_stage. create_records can set budget lines when it creates a deal, but update_records does not edit an existing budget because the append-versus-replace behavior has not been verified.
  • stage_conversion is a point-in-time estimate because Livespace exposes no stage history.
  • Reads and analyses use bounded windows. Inspect truncation fields before treating a result as complete.
  • Missing values and mixed currencies can make monetary sums null; the result names the reason.
  • API ids differ from the ids shown in the Livespace UI. Use IDs returned by crm_metadata, search_crm or another tool and never guess them.

Development

To work from source instead of the published package:

bash
git clone https://github.com/proAutomator/livespace-crm-mcp.gitcd livespace-crm-mcpbun installcp .env.example .envbun run dev

The repository commands are:

bash
bun test                 # complete offline suitebun run test:security    # focused security contract from docs/security.mdbun run typecheckbun run smoke            # live test-account check via .env or macOS Keychainbun run dev

bun run smoke and health with checkLivespace: true make real API calls. Use only a test Livespace account, never a production CRM.

The binding threat model and regression map are in docs/security.md. Report vulnerabilities privately as described in SECURITY.md.

Disclaimer

Community project. Not affiliated with, endorsed by or supported by Livespace S.A. "Livespace" is a trademark of its owner and is used here only to describe compatibility. Operations through the Livespace API run under your API key and, under Livespace's terms of service, at your responsibility.

Attribution

This server follows patterns from Adam Gospodarczyk's (overment) MCP servers, especially iceener/streamable-mcp-server-template (MIT): a small intent-shaped tool surface, operating instructions, batch-first writes with per-item results and errors with recovery hints. Thanks, Adam.

Author

Built by Kuba Masztalski

Bugs and feature requests: GitHub Issues. Security reports: see SECURITY.md.

License

MIT

来源:README.md,提交 46c12df

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

2
  1. v0.1.2最新Oct 5, 2026
  2. v0.1.1Sep 16, 2026

评分

已满足适用检查项的 50%

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

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

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

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分