
MarketSharp
io.github.WYRE-AI由 GitHub 账号 WYRE-AI 发布v1.0.0更新于 Nov 11, 2026
MCP server for MarketSharp CRM contacts, inquiries, appointments, jobs, notes and activities.
概览
只读的 MCP 服务器,让助手访问 MarketSharp CRM 的联系人、询盘、预约、工单、备注和参考列表。
- 可以做什么
- 查询公司与跨联系人、询盘、工单的全局搜索
- 读取和搜索联系人,包括 QuickFind 与分页筛选列表
- 读取询盘及其状态、备注和产品意向
- 读取预约、预约结果与工单,以及含合同总额的商机列表
- 读取备注、活动类型、员工、线索来源和部门
- 适用场景
- 当助手需要回答关于承包商在 MarketSharp 中的线索、预约、工单或客户记录的问题,或在不改动任何数据的前提下汇总销售管道与商机数据时适用。
- 运行要求
- 以 stdio 在本地运行;需要 Node.js 22 或更高版本,或使用已发布的容器镜像。需要 MARKETSHARP_COMPANY_ID、MARKETSHARP_API_KEY 和 MARKETSHARP_API_SECRET;镜像还需 MCP_TRANSPORT=stdio 与 AUTH_MODE=env。MARKETSHARP_EMPLOYEE_ID 可选,但联系人、询盘、工单搜索工具和备注列表需要它。需能访问 MarketSharp REST API。
安装
在 SourceWeft 中
- 打开 控制台中的 MarketSharp,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
marketsharp-mcp
MCP server for the MarketSharp CRM REST API
(https://restapi.marketsharpm.com, API version 2.0). It gives an AI assistant
read access to a home-improvement contractor's contacts, inquiries (leads),
appointments, jobs, notes and reference lists. Every tool is read-only.
Maintained by WYRE AI. It runs as a stdio server locally or as a stateless Streamable HTTP server behind a gateway.
Credentials
MarketSharp uses application authentication: the server exchanges your
Company ID, API key and API secret at POST /token for a short-lived bearer
token, caches it per credential set, and refreshes it on expiry or a 401.
Use a dedicated MarketSharp employee set up for API access rather than a person's login. The server never uses MarketSharp usernames or passwords.
Tools (25, all read-only)
There are no create, update or delete tools. Searches and filtered lists use
POST because that is how MarketSharp exposes them; they don't change data.
The client only sends the GET and POST routes these tools use (an allowlist of
route templates in src/client.ts). Any other request, including a GET no
tool uses, is refused before sign-in.
Running
Requires Node.js 22 or later.
The Docker image defaults to MCP_TRANSPORT=http and AUTH_MODE=gateway.
To run the image over stdio with MARKETSHARP_* credentials, pass
-e MCP_TRANSPORT=stdio -e AUTH_MODE=env as well; otherwise it fails closed
with "credentials are not configured".
HTTP (MCP_TRANSPORT=http, /mcp + /health) refuses to start without a real
CONDUIT_S2S_SECRET (at least 32 characters, not a known or placeholder-looking
value, not a repeated pattern, at least 8 distinct characters) and requires a
valid X-Gateway-S2S header on every /mcp request. /mcp takes POST only
(405 with Allow: POST otherwise). MCP_ALLOWED_HOSTS (comma-separated, off
when unset) limits the Host headers /mcp accepts. Every response sets
Cache-Control: no-store.
AUTH_MODEisgateway(the default when unset) orenv. Any other value refuses to start. Ingatewaymode credentials come only from thex-marketsharp-*headers;MARKETSHARP_*env is never read.envis for a single tenant and readsMARKETSHARP_*from the environment; over HTTP it refuses to start unless the company id, API key and API secret are set and the ids look like MarketSharp ids. Stdio uses the environment only whenAUTH_MODEis unset or exactlyenv; any other value (including a typo) is treated asgateway, so env credentials are never used by mistake.- Tool tiers:
readis the only tier. Conduit'sX-Conduit-Tool-Tiersheader can only narrow that set for one request. A present but empty header means no tools at all. Unlike the fleet template there is deliberately noMARKETSHARP_TOOL_TIERSvariable: with one tier there is nothing to choose, and nothing in the environment can change the tier set. - Every request goes to the fixed host
https://restapi.marketsharpm.comat exactly the path that was built. Ids in paths must look like MarketSharp ids (1-64 letters, digits or dashes, which covers numbers and GUIDs); anything else is rejected before any request. Redirects are refused (redirect: 'manual', any 3xx is an error), so the bearer token never leaves the host. Response bodies are read with a 4 MiB cap. - Tool output, tool errors and log lines are redacted: the API key and secret
in use (env or per request), bearer tokens and JWTs become
[REDACTED]. In MarketSharp responses, values under credential-named keys (apiKey,authorization,token,accessToken,refreshToken, and any key ending inpasswordorsecret) are redacted too. Arguments a tool doesn't declare are dropped before it runs. Vendor errors keep the HTTP status, MarketSharp's message and, when sent, the request id (x-request-id,request-idorx-correlation-id). - Page sizes and record counts above a tool's maximum are rejected, not
silently lowered, so "fewer rows than
rowsPerPagemeans the last page" stays true. Pages are passed through as given; the server never fetches more than one page per call. MCP_ALLOW_INSECURE_DEV=1lets HTTP start without a secret, on 127.0.0.1 only, and requiresNODE_ENV=development. With any otherNODE_ENVthe server refuses to start.- Tool output is MarketSharp data that other people may have typed (lead
forms, notes, names). Every successful result is escaped and wrapped in
<untrusted-content nonce="…">markers behind a notice telling the model not to follow instructions inside it. MarketSharp's own error text is wrapped the same way.
See .env.example. The image's health check probes /health only when
MCP_TRANSPORT=http.
Limits and unknowns
- MarketSharp doesn't publish rate limits. The server retries 429 with
Retry-Afteror exponential backoff (3 tries). A 503 is retried only for GET requests. Searches and filtered lists (which use POST) return it instead. - The
/token200 response shape isn't documented. The server acceptsaccess_tokenortoken, top level or insideresponse, or a bare JWT body (plain or JSON-quoted). - HTTP request bodies are capped at 256 KiB (262,144 bytes). Larger bodies, declared or chunked, get a 413.
- Responses are capped at 200,000 characters; narrow with filters or paging.
An oversized list keeps whole records and its paging fields (also when the
page sits under
responseordata), and a note says how many records were left out. On the paged lists the note names the exactpageNumberandrowsPerPage(pageandpageSizefor employees) that read on from the first record left out; other tools can't page, so it says to narrow with filters. A list whose first record alone is over the cap is cut as text. - The QuickFind searches always send
numberOfRecords(default 25): it is a non-nullable int32 in the spec, and what MarketSharp does with 0 is undocumented. - Not covered: calendar, texting, email, PaySimple, QuickBooks, CompanyCam, automation rules, analytics, estimates (v1 only), and all admin/config writes.
Security notes
companyIdandemployeeIdare identifiers, not secrets. The companies tools return them by design.MCP_ALLOWED_HOSTSis opt-in defence in depth behind S2S, not an auth control. It matches the Host header's hostname and ignores the port.- The S2S signature covers only the timestamp, the same as the gateway's verifier. Recipient binding comes from the per-vendor subkey.
MCP_ALLOW_INSECURE_DEVmust never be set in a deployment.- A request has at most 4 MarketSharp calls in flight, each counted from the start of the fetch until its response body is fully read. A large JSON-RPC batch queues instead of fanning out. A retry's wait doesn't hold a slot.
Development
evals/ holds the mcp-assert suite that CI runs against the built server.
Each release publishes ghcr.io/wyre-ai/marketsharp-mcp, and its release notes are on the GitHub Release for that version.
License
Apache-2.0
来源:README.md,提交 ce304c1
工具
0版本历史
1- v1.0.0最新Nov 11, 2026
评分
已满足适用检查项的 40%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
请在仓库或注册中心条目中声明许可证。