dealdesk-plugin 0.1.2 → 0.1.4
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/.agents/plugins/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +11 -5
- package/.cursor-plugin/plugin.json +1 -1
- package/README.md +2 -2
- package/assets/logo-dark.png +0 -0
- package/assets/logo-dark.svg +6 -0
- package/assets/logo.png +0 -0
- package/package.json +1 -1
- package/plugin.json +38 -7
- package/scripts/package-chatgpt-draft.js +25 -0
- package/skills/README.md +1 -1
- package/skills/dealdesk-craft-quote/SKILL.md +2 -0
- package/skills/dealdesk-create-card/SKILL.md +8 -2
- package/skills/dealdesk-help/SKILL.md +1 -1
- package/skills/dealdesk-manage-cases/SKILL.md +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dealdesk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "DealDesk skills and MCP tools for desk cards, email logs, quotes, customers, and portfolio publish.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "agenthouse",
|
|
@@ -15,13 +15,19 @@
|
|
|
15
15
|
"mcpServers": "./mcp.json",
|
|
16
16
|
"interface": {
|
|
17
17
|
"displayName": "DealDesk",
|
|
18
|
-
"shortDescription": "Desk cards, quotes, customers
|
|
18
|
+
"shortDescription": "Desk cards, quotes, customers",
|
|
19
|
+
"logo": "./assets/logo.png",
|
|
20
|
+
"composerIcon": "./assets/logo.png",
|
|
21
|
+
"logoDark": "./assets/logo-dark.png",
|
|
22
|
+
"composerIconDark": "./assets/logo-dark.png",
|
|
23
|
+
"brandColor": "#090B09",
|
|
24
|
+
"brandColorDark": "#9EFF3D",
|
|
19
25
|
"longDescription": "Operate DealDesk from ChatGPT or Codex. Tools run on the agenthouse MCP endpoint. Delete is not available.",
|
|
20
26
|
"developerName": "agenthouse",
|
|
21
|
-
"category": "
|
|
27
|
+
"category": "Business & Operations",
|
|
22
28
|
"capabilities": ["Read", "Write"],
|
|
23
|
-
"websiteURL": "https://agenthouse
|
|
24
|
-
"
|
|
29
|
+
"websiteURL": "https://github.com/agenthouse-org/dealdesk-plugin",
|
|
30
|
+
"supportURL": "https://github.com/agenthouse-org/dealdesk-plugin/issues",
|
|
25
31
|
"defaultPrompt": [
|
|
26
32
|
"List open DealDesk cards for my project.",
|
|
27
33
|
"Log this inbound email on the matching desk card."
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dealdesk",
|
|
3
3
|
"displayName": "DealDesk",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.4",
|
|
5
5
|
"description": "DealDesk skills and slash commands. Install opens the agenthouse sign-in page so you can choose a project and grant access.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "agenthouse",
|
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ If you are an AI assistant helping someone install DealDesk, follow **[install-f
|
|
|
20
20
|
- Export Deal Intelligence workbooks for offline analysis
|
|
21
21
|
- Preview and confirm portfolio publish (with an explicit confirmation step)
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
For safety, deletion is unavailable through MCP and must be done manually in DealDesk. Closing a card is a separate option that keeps the record; the assistant asks before closing a card in response to a deletion request.
|
|
24
24
|
|
|
25
25
|
## Customer data responsibility
|
|
26
26
|
|
|
@@ -61,7 +61,7 @@ Commit the version in this repo, then publish a GitHub Release tagged `vX.Y.Z` (
|
|
|
61
61
|
|
|
62
62
|
On npm, set the trusted publisher for `dealdesk-plugin` to GitHub Actions, repository `agenthouse-org/dealdesk-plugin`, workflow file `publish.yml`, and allow `npm publish`. The package has to exist before that publisher can be saved. No npm token is stored in GitHub.
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
Public directory review also requires verified website, support, privacy, and terms URLs, review cases, a demo recording, and reviewer access. The package can carry listing and review metadata; complete and verify all materials before submitting through the OpenAI portal. A GitHub or npm release does not itself publish the plugin in the ChatGPT directory.
|
|
65
65
|
|
|
66
66
|
### Local connector
|
|
67
67
|
|
|
Binary file
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="DealDesk">
|
|
2
|
+
<title>DealDesk</title>
|
|
3
|
+
<rect width="128" height="128" rx="28" fill="#9EFF3D"/>
|
|
4
|
+
<path fill="#090B09" fill-rule="evenodd" d="M36 28 H64 A36 36 0 0 1 64 100 H36 A4 4 0 0 1 32 96 V32 A4 4 0 0 1 36 28 Z M46 42 H64 A22 22 0 0 1 64 86 H46 Z"/>
|
|
5
|
+
<path fill="#090B09" d="M64 54 L74 64 L64 74 L54 64 Z"/>
|
|
6
|
+
</svg>
|
package/assets/logo.png
ADDED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dealdesk-plugin",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "DealDesk for ChatGPT, Claude, Cursor, and Codex. Desk cards, quotes, customers, and portfolio on agenthouse.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/agenthouse-org/dealdesk-plugin",
|
package/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "dealdesk",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.4",
|
|
5
5
|
"description": "DealDesk skills and MCP tools for desk cards, email logs, quotes, customers, and portfolio publish.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "agenthouse",
|
|
@@ -17,19 +17,50 @@
|
|
|
17
17
|
"interface": {
|
|
18
18
|
"displayName": "DealDesk",
|
|
19
19
|
"shortDescription": "Desk cards, quotes, customers",
|
|
20
|
-
"logo": "./assets/logo.
|
|
21
|
-
"composerIcon": "./assets/logo.
|
|
22
|
-
"
|
|
20
|
+
"logo": "./assets/logo.png",
|
|
21
|
+
"composerIcon": "./assets/logo.png",
|
|
22
|
+
"logoDark": "./assets/logo-dark.png",
|
|
23
|
+
"composerIconDark": "./assets/logo-dark.png",
|
|
24
|
+
"brandColor": "#090B09",
|
|
25
|
+
"brandColorDark": "#9EFF3D",
|
|
26
|
+
"longDescription": "Work with your DealDesk project in ChatGPT. Find and update desk cards, record customer conversations, look up companies and contacts, and prepare quotes using your published product portfolio. Work with cases and orders, export Deal Intelligence data for analysis, and preview a portfolio publication before confirming it.\n\nConnect an agenthouse account with access to DealDesk, a paid CRM product. Your authorized project determines the data available. Customer and deal information returned by DealDesk is shared with the AI host and may be available to other tools in the conversation. Delete operations are not available through DealDesk MCP.",
|
|
23
27
|
"developerName": "agenthouse",
|
|
24
|
-
"category": "
|
|
28
|
+
"category": "Business & Operations",
|
|
25
29
|
"capabilities": ["Read", "Write"],
|
|
26
|
-
"websiteURL": "https://agenthouse
|
|
27
|
-
"
|
|
30
|
+
"websiteURL": "https://github.com/agenthouse-org/dealdesk-plugin",
|
|
31
|
+
"supportURL": "https://github.com/agenthouse-org/dealdesk-plugin/issues",
|
|
28
32
|
"defaultPrompt": [
|
|
29
33
|
"List open DealDesk cards for my project.",
|
|
30
34
|
"Log this inbound email on the matching desk card.",
|
|
31
35
|
"Create a quote from the published portfolio for this configuration."
|
|
32
36
|
]
|
|
37
|
+
},
|
|
38
|
+
"review": {
|
|
39
|
+
"prompts": [
|
|
40
|
+
"List open DealDesk cards for my project.",
|
|
41
|
+
"Find a customer and summarize their commercial activity.",
|
|
42
|
+
"Help me prepare a quote from my published portfolio."
|
|
43
|
+
],
|
|
44
|
+
"commerce": true,
|
|
45
|
+
"commerce_description": "DealDesk supports commercial quotes and orders. The plugin does not process payments or provide online checkout. DealDesk access is purchased by contract through agenthouse.org.",
|
|
46
|
+
"test_cases": {
|
|
47
|
+
"positive": [
|
|
48
|
+
{"description":"In the reviewer project CHATGPTREVIEW01, list the seeded desk cards.","prompt":"List the open DealDesk cards in my project.","tools_triggered":"dealdesk.list_cards","expected_behavior":"Return the two seeded request-stage cards, Demo: workspace furniture proposal and Demo: meeting room refresh, based on the tool response."},
|
|
49
|
+
{"description":"In the reviewer project, look up the seeded customer.","prompt":"Find Example Customer in the customer directory.","tools_triggered":"dealdesk.list_companies","expected_behavior":"Search with q set to Example Customer and identify Example Customer GmbH from the returned record; do not invent customer details."},
|
|
50
|
+
{"description":"In the reviewer project, browse the published sample portfolio.","prompt":"What products are in my published portfolio?","tools_triggered":"dealdesk.discover, dealdesk.list_portfolio_articles","expected_behavior":"Discover the portfolio domain if necessary, then list the returned Demo workspace package article and its EUR 1200 basic price without inventing products."},
|
|
51
|
+
{"description":"In the reviewer project, inspect the seeded workspace proposal card.","prompt":"Show me the details of the workspace furniture proposal card.","tools_triggered":"dealdesk.list_cards, dealdesk.get_card","expected_behavior":"Find the matching card and retrieve it using its returned cardId; report its description, request stage and linked Example Customer as returned."},
|
|
52
|
+
{"description":"In the reviewer project, preview the current sample portfolio publication without publishing.","prompt":"Preview my portfolio publication and tell me whether it can be published.","tools_triggered":"dealdesk.discover, dealdesk.portfolio_publish_preview","expected_behavior":"Discover portfolio-authoring if needed and summarize the returned preview and blockers. Do not call dealdesk.portfolio_publish without explicit confirmation."}
|
|
53
|
+
],
|
|
54
|
+
"negative": [
|
|
55
|
+
{"description":"Deletion is not exposed by this MCP server. Explain the limit and do not invoke a delete tool or claim deletion.","prompt":"Permanently delete the workspace furniture proposal card."},
|
|
56
|
+
{"description":"The catalog does not send email. Explain the limit and do not claim to send a message or log it as a substitute.","prompt":"Send an email to my customer telling them the proposal is ready."},
|
|
57
|
+
{"description":"Publishing requires a preview and explicit confirmation. Preview if appropriate, but do not invoke dealdesk.portfolio_publish before the user confirms the preview.","prompt":"Publish my portfolio immediately without showing me a preview or asking for confirmation."}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"publication": {
|
|
62
|
+
"countries": [],
|
|
63
|
+
"release_notes": "DealDesk for ChatGPT: work with desk cards, customers, quotes, cases, orders, and the product portfolio."
|
|
33
64
|
}
|
|
34
65
|
}
|
|
35
66
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
// Produces an incomplete public-review draft; remaining materials must be verified.
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const { createZip, readZip } = require('./zip-archive');
|
|
8
|
+
const root = path.resolve(__dirname, '..');
|
|
9
|
+
function walk(rel) {
|
|
10
|
+
const p = path.join(root, rel);
|
|
11
|
+
if (fs.statSync(p).isFile()) return [rel.replace(/\\/g, '/')];
|
|
12
|
+
return fs.readdirSync(p, { withFileTypes: true }).flatMap(entry => {
|
|
13
|
+
if (entry.isSymbolicLink()) throw new Error('Symlinks are not allowed in the package');
|
|
14
|
+
return walk(path.join(rel, entry.name));
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
const manifest = JSON.parse(fs.readFileSync(path.join(root, 'plugin.json')));
|
|
18
|
+
if (manifest.apps != null || manifest.extensions?.['com.openai']?.apps != null) throw new Error('Public uploads cannot contain app bindings');
|
|
19
|
+
const files = ['plugin.json', 'mcp.json', 'LICENSE', 'assets', 'skills'].flatMap(walk).sort();
|
|
20
|
+
const zip = createZip(files.map(name => ({ name, data: fs.readFileSync(path.join(root, name)) })));
|
|
21
|
+
const output = path.join(root, 'dist', `dealdesk-chatgpt-draft-${manifest.version}.zip`);
|
|
22
|
+
fs.mkdirSync(path.dirname(output), { recursive: true });
|
|
23
|
+
fs.writeFileSync(output, zip);
|
|
24
|
+
if (readZip(zip).map(entry => entry.name).sort().join('\n') !== files.join('\n')) throw new Error('Archive inventory mismatch');
|
|
25
|
+
console.log(`${output}\n${files.length} files; incomplete review draft, not ready to submit`);
|
package/skills/README.md
CHANGED
|
@@ -4,7 +4,7 @@ These notes describe common workflows the DealDesk MCP connector supports. Hosts
|
|
|
4
4
|
|
|
5
5
|
## Guidelines
|
|
6
6
|
|
|
7
|
-
-
|
|
7
|
+
- Deletion is unavailable through MCP and must be done manually in DealDesk. Offer closing as a separate option, explain that the record remains, and wait for explicit agreement before making a substitute change.
|
|
8
8
|
- Prefer the export skill for analysis instead of paging through large lists endlessly.
|
|
9
9
|
- For portfolio publish, always review the preview and confirm before publishing.
|
|
10
10
|
- Skill-gated tools need `dealdesk.discover` with the matching domain first. The server remembers that unlock for the API key or OAuth user.
|
|
@@ -19,3 +19,5 @@ Tools: `dealdesk.list_companies`, `dealdesk.get_company`, `dealdesk.create_compa
|
|
|
19
19
|
8. Offer share link / PDF when ready. Never delete through MCP.
|
|
20
20
|
|
|
21
21
|
Do not invent prices for CPQ lines client-side. Classic/open positions may carry explicit `unitPrice`.
|
|
22
|
+
|
|
23
|
+
Opening an existing open quote in the DealDesk editor automatically fills empty customer sections from its directory link, or from an unambiguous linked card if the quote has no customer data or link. Existing details and closed quotes remain unchanged. MCP `get_quote` and `get_quote_summary` read persisted data and do not perform this repair. To assign a customer through MCP, use `dealdesk.patch_card`; linked draft quote details are populated with that assignment.
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dealdesk-create-card
|
|
3
|
-
description: Create or update a DealDesk desk card
|
|
3
|
+
description: Create or update a DealDesk desk card, or respond to requests to delete or close one. Never delete a card or replace a deletion request with closing without the user's explicit agreement.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Create or update a desk card
|
|
7
7
|
|
|
8
8
|
Tools: `dealdesk.create_card`, `dealdesk.patch_card`, `dealdesk.get_card`, `dealdesk.list_cards`, `dealdesk.list_desk_stages`, `dealdesk.list_desk_users`, `dealdesk.list_card_activity`
|
|
9
9
|
|
|
10
|
-
Create a card or update title, stage, description, owner, priority, Customer Directory links, deal estimates, and quote deal-value override.
|
|
10
|
+
Create a card or update title, stage, description, owner, priority, Customer Directory links, deal estimates, and quote deal-value override.
|
|
11
|
+
|
|
12
|
+
## Deletion and closing
|
|
13
|
+
|
|
14
|
+
For safety, deletion is unavailable through DealDesk MCP and must be done manually in DealDesk. When asked to delete a card, explain this and offer closing the card as a separate option. Closing retains the record and changes its stage; it is not deletion. Ask whether the user wants to close it, and wait for an explicit yes before making any change. Do not call `patch_card`, `patch_case`, or any other write tool as a substitute for deletion without that agreement. If the user explicitly requests closing the card, proceed with the normal stage-update workflow, using a stage returned by `list_desk_stages`.
|
|
11
15
|
|
|
12
16
|
Use `description` for the main card body. Use `deskDescription` for a local desk-only description. Use `dealdesk.add_card_note` only for structured notes, not as a substitute for the card description.
|
|
13
17
|
|
|
@@ -52,6 +56,8 @@ On an unaccepted quote card, `dealValueOverride` + `dealValueOverrideNet` replac
|
|
|
52
56
|
|
|
53
57
|
`patch_card` with `companyId` / `contactId` (or `null` to clear). Clearing company also clears contact. Company/contact changes also sync a linked local case and quote customer link.
|
|
54
58
|
|
|
59
|
+
For a linked draft quote, assignment also populates its company/contact details for the quote context and document template. Clearing the customer clears those draft details. Non-draft quote details remain unchanged.
|
|
60
|
+
|
|
55
61
|
## History
|
|
56
62
|
|
|
57
63
|
`dealdesk.list_card_activity` returns stage/owner/account/note/quote/order/share milestones (not the comment/email timeline — that is status updates).
|
|
@@ -49,7 +49,7 @@ Hosts may prefix commands with the plugin name (for example `/dealdesk:dealdesk-
|
|
|
49
49
|
|
|
50
50
|
## Hard limits
|
|
51
51
|
|
|
52
|
-
- Delete is
|
|
52
|
+
- Delete is unavailable through MCP and must be done manually in DealDesk. If asked to delete, explain that closing retains the record and offer it as a separate option; wait for explicit agreement before changing a card's stage or closing a share.
|
|
53
53
|
- Portfolio publish needs preview, then `portfolio_publish` with `confirm=true`.
|
|
54
54
|
- Do not invent prices. Prefer portfolio evaluation and published revision ids.
|
|
55
55
|
- Prefer `/dealdesk-export-analysis` over paging through large lists forever.
|
|
@@ -7,7 +7,7 @@ description: List, create, and update DealDesk cases. Use for local sales/reques
|
|
|
7
7
|
|
|
8
8
|
Tools: `dealdesk.list_cases`, `dealdesk.get_case`, `dealdesk.create_case`, `dealdesk.patch_case`, `dealdesk.list_desk_stages`, `dealdesk.list_desk_users`
|
|
9
9
|
|
|
10
|
-
Create or update local DealDesk cases (title, stage, description, company/contact/quote links, estimates, ownerUserId). Resolve stages with `dealdesk.list_desk_stages` and owners with `dealdesk.list_desk_users`.
|
|
10
|
+
Create or update local DealDesk cases (title, stage, description, company/contact/quote links, estimates, ownerUserId). Resolve stages with `dealdesk.list_desk_stages` and owners with `dealdesk.list_desk_users`. Deletion is unavailable through MCP and must be done manually in DealDesk. If asked to delete, explain that closing retains the record, offer it as an option, and wait for the user's explicit agreement before changing a stage or making any other substitute write. Do not call disconnected Salesforce Opportunity search endpoints.
|
|
11
11
|
|
|
12
12
|
## Stages (discrete column ids)
|
|
13
13
|
|