
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 分
請在儲存庫或註冊中心條目中宣告授權條款。