@solumflow-app/crm-mcp-server 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -34,6 +34,13 @@ Any other MCP client takes the same command and the same two variables:
34
34
 
35
35
  The server speaks over stdio. Errors go to stderr.
36
36
 
37
+ The same set of tools can be put on any `McpServer` with
38
+ `registerSolumFlowTools(server, client, { clientVersion, baseUrl, connectedAs })`
39
+ from `@solumflow-app/crm-mcp-server/register-tools`. `connectedAs` is `'key'`
40
+ for a server that runs on a key, as this one does, and `'app'` for one that
41
+ runs on the token of an app connected through OAuth as a person: the app uses
42
+ that for its online server, which then also has the knowledge base tools.
43
+
37
44
  ## Skills
38
45
 
39
46
  The skills that walk an agent through connecting a website (a menu with
@@ -138,23 +145,80 @@ scope the key lacks answers `forbidden` and names the scope it needs.
138
145
  | `get_email_template` | `email-templates:manage` | One e-mail template. |
139
146
  | `create_email_template` | `email-templates:manage` | Save a new e-mail template. Never sends one. |
140
147
  | `update_email_template` | `email-templates:manage` | Change an e-mail template. |
141
- | `list_tasks` | `tasks:read` | Tasks outside projects. |
142
- | `get_task` | `tasks:read` | One task outside a project. |
143
- | `create_task` | `tasks:write` | Make a task on a contact, a deal or nothing. |
144
- | `update_task` | `tasks:write` | Change or complete a task. |
148
+ | `list_tasks` | `tasks:read`, or `projects:read` with `projectId` | Tasks outside projects; with `projectId`, the tasks of that project as the person behind the key sees them. |
149
+ | `get_task` | `tasks:read`, or `projects:read` with `projectId` | One task. |
150
+ | `create_task` | `tasks:write`, or `projects:write` with `projectId` | Make a task on a contact, a deal or nothing; with `projectId`, a task in that project in the person's name. |
151
+ | `update_task` | `tasks:write`, or `projects:write` with `projectId` | Change or complete a task. |
152
+ | `list_projects` | `projects:read` | Projects, groups and events the person behind the key sees. |
153
+ | `get_project` | `projects:read` | One of them. |
154
+ | `list_milestones` | `projects:read` | A project's milestones, in its own order. |
155
+ | `list_time_entries` | `time:read` | The person's hours in a period of at most 92 days, or a colleague's as far as they may read those. |
156
+ | `list_project_services` | `time:read` | What hours can be written on in a project: its services and hour types. |
157
+ | `add_time_entry` | `time:write` | Write an hour of the person, at the service's rate. |
158
+ | `update_time_entry` | `time:write` | Change one of the person's own hours; one on an invoice line stands. |
159
+ | `get_budget_report` | `time:read` | A project's budget per service, as the person's own screen reads it. |
160
+ | `list_project_channels` | `project-messages:write` | The group chats and channels chosen for the key. Names and ids, never messages. |
161
+ | `post_project_message` | `project-messages:write` | Post in a chosen channel, in the person's name. Mails the others in it, customers included. |
162
+ | `list_project_folders` | `project-files:write` | A project's folders, to upload into. |
163
+ | `upload_project_file` | `project-files:write` | Upload a file from this machine to a project. Never a secret-looking file. |
145
164
  | `list_appointments` | `calendar:read` | Appointments outside projects, in a window of at most 92 days. |
146
165
  | `get_appointment` | `calendar:read` | One appointment outside a project. |
147
166
  | `upsert_calendar` | `calendar:manage` | Make or change a calendar by its slug: `event`, `round_robin`, or the account's own services calendar. |
148
167
  | `set_calendar_availability` | `calendar:manage` | A calendar's weekly hours and its exceptions per date. |
149
168
  | `upsert_services` | `calendar:manage` | Up to fifty bookable services by slug; one nobody performs gets the account's owner. |
169
+ | `site_builder_list_sites` | `sites:read` | The account's websites with their pages (id, path, language, published or not). |
170
+ | `site_builder_read_page` | `sites:read` | A page's draft as a tree of elements with ids; `includeCatalogue` adds the element types, style properties and design tokens. |
171
+ | `site_builder_edit_draft` | `sites:write` | Up to 100 targeted operations on a page's draft by element id: insert, delete, move, update, replace. The draft only. |
172
+ | `site_builder_html_to_draft` | `sites:write` | HTML with a style block turned into sections of a page's draft. The draft only. |
150
173
  | `list_client_accounts` | `clients:manage` | The customer accounts a reseller sold, with their owner and modules. |
151
174
  | `get_client_account` | `clients:manage` | One of them. |
152
175
  | `create_client_account` | `clients:manage` | A customer account with a workspace of its own and a mail to its owner; the same owner twice makes nothing. |
153
176
  | `set_client_modules` | `clients:manage` | The modules a customer account is sold with, within what the reseller may hand out. |
154
177
 
178
+ ### Projects: the key acts as its person
179
+
180
+ Projects differ per person: who sees a members-only project, a task only for
181
+ a group's leads, a colleague's hours. So every project tool acts as the
182
+ person behind the key -- whoever made it, or approved the connected app --
183
+ and sees and may exactly what that person sees and may in the app. What it
184
+ makes (a task, an hour, a message, a file) is in that person's name, shown
185
+ in the app as "via <name of the key or app>". The tools never make or change
186
+ a project itself, its members or who sees it; they read no conversation and
187
+ open, share, move or delete no file. A message goes only to the channels
188
+ chosen for the key in the app, and mails the others in the channel.
189
+
155
190
  Every catalogue tool takes an optional `object`: the slug of another catalogue
156
191
  of the account (from `list_catalogs`). Left out, it is the account's own.
157
192
 
193
+ ## Only on the online server
194
+
195
+ The knowledge base follows the rights of a person: who reads a category
196
+ depends on its audience, its groups and the people it is shared with. A key
197
+ has no person, so this server, which runs on a key, does not have these tools
198
+ and the API refuses a key on their routes. They are on the app's online server
199
+ (`/api/mcp`), where an app such as a Claude connector is connected through
200
+ OAuth as the person who approved it.
201
+
202
+ | Tool | Scope | What it does |
203
+ | --- | --- | --- |
204
+ | `list_kb_categories` | `knowledge-base:read` | The categories the person sees, where they may write, who reads each and whether the website chat answers from it |
205
+ | `search_kb` | `knowledge-base:read` | Articles found by meaning in their title and text, with the piece that matched |
206
+ | `list_kb_articles` | `knowledge-base:read` | Articles, in one category or all; a search on title and summary |
207
+ | `get_kb_article` | `knowledge-base:read` | One article's text as HTML, its status and its version |
208
+ | `create_kb_article` | `knowledge-base:write` | A new article, always a draft |
209
+ | `update_kb_article` | `knowledge-base:write` | A new title, summary or text, at the version that was read |
210
+ | `create_kb_category` | `knowledge-base:write` | A new category that only the team reads, with or without the website chat |
211
+
212
+ A category made here is always for the team alone; making it public, or
213
+ switching the website chat for a category that already exists, stays in the
214
+ app. `search_kb` embeds the question on Bedrock in Frankfurt and searches by
215
+ words alone, and says so, when that does not answer.
216
+
217
+ Publishing, taking offline, moving and deleting stay in the app; a published
218
+ article whose text is changed here is live at once. Every change is a new
219
+ version of the article's document, in the person's name. An article somebody
220
+ has open in the editor answers `article_in_use` until they close it.
221
+
158
222
  ## Customer accounts for a reseller
159
223
 
160
224
  A key of a reseller with `clients:manage` sets up the accounts it sells: