clawskills-mcp 0.3.4 → 0.3.6
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/dist/index.js +19 -4
- package/dist/index.test.js +18 -1
- package/package.json +6 -3
- package/skills/ROADMAP.md +28 -34
- package/skills/asana/skill.md +4 -0
package/dist/index.js
CHANGED
|
@@ -13,8 +13,22 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
13
13
|
function resolveSkillsDir() {
|
|
14
14
|
if (process.env.SKILLS_DIR)
|
|
15
15
|
return process.env.SKILLS_DIR;
|
|
16
|
-
//
|
|
17
|
-
|
|
16
|
+
// Prefer the repo-root skills directory in local development, but fall back
|
|
17
|
+
// to the bundled package copy for published installs.
|
|
18
|
+
const candidates = [
|
|
19
|
+
path.resolve(__dirname, "../../skills"),
|
|
20
|
+
path.resolve(__dirname, "../skills"),
|
|
21
|
+
];
|
|
22
|
+
for (const candidate of candidates) {
|
|
23
|
+
if (fs.existsSync(candidate))
|
|
24
|
+
return candidate;
|
|
25
|
+
}
|
|
26
|
+
return candidates[0];
|
|
27
|
+
}
|
|
28
|
+
function resolvePackageVersion() {
|
|
29
|
+
const packageJsonPath = path.resolve(__dirname, "../package.json");
|
|
30
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
31
|
+
return packageJson.version ?? "0.0.0";
|
|
18
32
|
}
|
|
19
33
|
function loadSkills(skillsDir) {
|
|
20
34
|
const skills = new Map();
|
|
@@ -145,13 +159,14 @@ function skillSummary(content) {
|
|
|
145
159
|
// ---------------------------------------------------------------------------
|
|
146
160
|
// Exports for testing
|
|
147
161
|
// ---------------------------------------------------------------------------
|
|
148
|
-
export { loadSkills, extractSection, findSkill, searchSkills, skillSummary };
|
|
162
|
+
export { resolveSkillsDir, resolvePackageVersion, loadSkills, extractSection, findSkill, searchSkills, skillSummary };
|
|
149
163
|
// ---------------------------------------------------------------------------
|
|
150
164
|
// MCP Server setup
|
|
151
165
|
// ---------------------------------------------------------------------------
|
|
152
166
|
const SKILLS_DIR = resolveSkillsDir();
|
|
167
|
+
const PACKAGE_VERSION = resolvePackageVersion();
|
|
153
168
|
const skills = loadSkills(SKILLS_DIR);
|
|
154
|
-
const server = new Server({ name: "clawskills-mcp", version:
|
|
169
|
+
const server = new Server({ name: "clawskills-mcp", version: PACKAGE_VERSION }, { capabilities: { tools: {} } });
|
|
155
170
|
// List tools
|
|
156
171
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
157
172
|
tools: [
|
package/dist/index.test.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as fs from "fs";
|
|
|
3
3
|
import * as os from "os";
|
|
4
4
|
import * as path from "path";
|
|
5
5
|
import { fileURLToPath } from "url";
|
|
6
|
-
import { loadSkills, extractSection, findSkill, searchSkills, skillSummary } from "./index.js";
|
|
6
|
+
import { resolveSkillsDir, resolvePackageVersion, loadSkills, extractSection, findSkill, searchSkills, skillSummary } from "./index.js";
|
|
7
7
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
8
|
const REAL_SKILLS_DIR = path.resolve(__dirname, "../../skills");
|
|
9
9
|
// ---------------------------------------------------------------------------
|
|
@@ -77,6 +77,23 @@ describe("loadSkills", () => {
|
|
|
77
77
|
});
|
|
78
78
|
});
|
|
79
79
|
// ---------------------------------------------------------------------------
|
|
80
|
+
// Environment and package metadata
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
describe("resolveSkillsDir", () => {
|
|
83
|
+
it("prefers the canonical repo-root skills directory", () => {
|
|
84
|
+
expect(path.basename(resolveSkillsDir())).toBe("skills");
|
|
85
|
+
expect(loadSkills(resolveSkillsDir()).has("linear")).toBe(true);
|
|
86
|
+
expect(loadSkills(resolveSkillsDir()).has("stripe")).toBe(true);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe("resolvePackageVersion", () => {
|
|
90
|
+
it("matches package.json", () => {
|
|
91
|
+
const packageJsonPath = path.resolve(__dirname, "../package.json");
|
|
92
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
93
|
+
expect(resolvePackageVersion()).toBe(packageJson.version);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
80
97
|
// findSkill
|
|
81
98
|
// ---------------------------------------------------------------------------
|
|
82
99
|
describe("findSkill", () => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clawskills-mcp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.6",
|
|
4
4
|
"description": "MCP server exposing ClawSkills API integration skill docs to AI agents",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "ClawSkills Contributors",
|
|
@@ -33,8 +33,11 @@
|
|
|
33
33
|
"skills/"
|
|
34
34
|
],
|
|
35
35
|
"scripts": {
|
|
36
|
-
"
|
|
37
|
-
"
|
|
36
|
+
"sync:skills": "node scripts/sync-skills.mjs",
|
|
37
|
+
"check:skills": "node scripts/check-skills.mjs",
|
|
38
|
+
"check:freshness": "node scripts/check-skills.mjs --freshness",
|
|
39
|
+
"prepack": "npm run sync:skills",
|
|
40
|
+
"build": "npm run sync:skills && tsc",
|
|
38
41
|
"start": "node dist/index.js",
|
|
39
42
|
"dev": "ts-node src/index.ts",
|
|
40
43
|
"test": "vitest run",
|
package/skills/ROADMAP.md
CHANGED
|
@@ -12,26 +12,26 @@ This skill set enables end-to-end automation and integration across the most com
|
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
## Current state (as of 2026-03-
|
|
15
|
+
## Current state (as of 2026-03-10)
|
|
16
16
|
|
|
17
17
|
### What's shipped
|
|
18
18
|
|
|
19
19
|
| Layer | Status |
|
|
20
20
|
|-------|--------|
|
|
21
|
-
| **
|
|
22
|
-
| **MCP server** — `clawskills-mcp` v0.
|
|
21
|
+
| **14 skill docs** — Monday.com, Salesforce, Jira, Dynamics 365, HubSpot, ServiceNow, Zendesk, Asana, GitHub, Figma, Slack, Stripe, Notion, Linear | ✅ Live |
|
|
22
|
+
| **MCP server** — `clawskills-mcp` v0.3.4 on npm; `list_skills`, `get_skill`, `search_skills` | ✅ Live |
|
|
23
23
|
| **CI pipeline** — build + test on every push/PR via `ci.yml` | ✅ Live |
|
|
24
24
|
| **Release automation** — `release.yml` workflow_dispatch → bump, tag, npm publish via OIDC | ✅ Live |
|
|
25
|
-
| **Test suite** — Vitest unit tests + real-skills validation (required sections, ≥5 KB, all
|
|
25
|
+
| **Test suite** — Vitest unit tests + real-skills validation (required sections, ≥5 KB, all 14 tools) | ✅ Live |
|
|
26
26
|
| **Public repo readiness** — MIT license, `.gitignore`, full `package.json` metadata | ✅ Ready |
|
|
27
27
|
|
|
28
28
|
### Content coverage by original phase
|
|
29
29
|
|
|
30
30
|
| Phase | Theme | Status |
|
|
31
31
|
|-------|-------|--------|
|
|
32
|
-
| Phase 1 — Foundation (Auth + Core CRUD) | Auth flows, basic CRUD, retry patterns | ✅ Complete — all
|
|
33
|
-
| Phase 2 — High-Frequency Workflows | 6–12 recipes per tool | ✅ Complete — all
|
|
34
|
-
| Phase 3 — Event-Driven & Real-Time | Webhook setup, signature verification, event handling | ✅ Complete — all
|
|
32
|
+
| Phase 1 — Foundation (Auth + Core CRUD) | Auth flows, basic CRUD, retry patterns | ✅ Complete — all 14 tools |
|
|
33
|
+
| Phase 2 — High-Frequency Workflows | 6–12 recipes per tool | ✅ Complete — all 14 tools |
|
|
34
|
+
| Phase 3 — Event-Driven & Real-Time | Webhook setup, signature verification, event handling | ✅ Complete — all 14 tools |
|
|
35
35
|
| Phase 4 — Bulk & Advanced Operations | Batch APIs, large-volume patterns | ⚠️ Partial — documented for most tools; not all have >500-record examples |
|
|
36
36
|
| Phase 5 — Cross-Tool Orchestration | Multi-system recipes spanning 2+ tools | ❌ Not started — patterns listed in INDEX.md but no dedicated recipes |
|
|
37
37
|
|
|
@@ -39,31 +39,9 @@ This skill set enables end-to-end automation and integration across the most com
|
|
|
39
39
|
|
|
40
40
|
## Next development phase
|
|
41
41
|
|
|
42
|
-
### Priority 1 —
|
|
42
|
+
### Priority 1 — Freshness and accuracy pipeline
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
| Skill | Why | Key areas to cover |
|
|
47
|
-
|-------|-----|--------------------|
|
|
48
|
-
| **Stripe** | Most common payments API; revenue-critical workflows missing from current library | Webhooks (event types + signature), Checkout Sessions, subscriptions, refunds, idempotency keys, Connect (multi-account) |
|
|
49
|
-
| **Notion** | Knowledge base + lightweight PM; high demand for doc/wiki automation | Pages API, Databases + filters + sorts, Blocks API (rich text), Search, cursor pagination |
|
|
50
|
-
| **Linear** | Fast-growing engineering tool, increasingly replacing Jira at startups | Issues, Projects, Teams, Cycles, GraphQL API, webhooks, OAuth + PAT auth |
|
|
51
|
-
|
|
52
|
-
**Order:** Stripe → Notion → Linear (payments coverage is the biggest gap).
|
|
53
|
-
|
|
54
|
-
**Acceptance criteria for each:**
|
|
55
|
-
- [ ] All 11 required sections present (CI enforces)
|
|
56
|
-
- [ ] `Last validated:` date in header
|
|
57
|
-
- [ ] Auth section has working `curl` example tested against sandbox/dev environment
|
|
58
|
-
- [ ] At least 8 recipes with request/response examples
|
|
59
|
-
- [ ] Rate limits verified against official docs
|
|
60
|
-
- [ ] INDEX.md and README.md updated
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
### Priority 2 — Freshness CI pipeline (the moat)
|
|
65
|
-
|
|
66
|
-
A weekly automated check that skill docs aren't stale and that key API patterns still work.
|
|
44
|
+
Now that the core 14-skill library exists, the next moat is keeping it accurate as vendor APIs change.
|
|
67
45
|
|
|
68
46
|
**Phase A — Staleness detection (low-effort, high-value):**
|
|
69
47
|
- Parse `Last validated:` date from each `skill.md` header
|
|
@@ -71,7 +49,7 @@ A weekly automated check that skill docs aren't stale and that key API patterns
|
|
|
71
49
|
- Open a GitHub issue automatically when a doc exceeds the threshold
|
|
72
50
|
- Deliverable: `.github/workflows/freshness.yml` (weekly cron, `0 9 * * 1`) + `scripts/check-freshness.ts`
|
|
73
51
|
|
|
74
|
-
**Phase B — Live smoke tests (medium-effort, highest-value
|
|
52
|
+
**Phase B — Live smoke tests (medium-effort, highest-value):**
|
|
75
53
|
- For each tool, maintain a minimal test that hits: auth endpoint + one read
|
|
76
54
|
- Run weekly against sandbox environments using stored credentials (GitHub Secrets)
|
|
77
55
|
- Failure creates a doc-review issue with the tool name and failing assertion
|
|
@@ -84,12 +62,28 @@ A weekly automated check that skill docs aren't stale and that key API patterns
|
|
|
84
62
|
|
|
85
63
|
---
|
|
86
64
|
|
|
65
|
+
### Priority 2 — Packaging and distribution hygiene
|
|
66
|
+
|
|
67
|
+
The repo now needs tighter alignment between the canonical `skills/` directory, the bundled npm package contents, and the docs that describe them.
|
|
68
|
+
|
|
69
|
+
- Eliminate stale bundled skill copies during local development
|
|
70
|
+
- Ensure the MCP server reports the package version rather than a hardcoded value
|
|
71
|
+
- Add a CI check that the packaged `mcp-server/skills` tree matches root `skills/`
|
|
72
|
+
- Add a CI/doc check that skill counts and package versions referenced in README/ROADMAP stay current
|
|
73
|
+
|
|
74
|
+
**Acceptance criteria:**
|
|
75
|
+
- [ ] `npm run build` and `npm start` use the same skill set locally and in published packages
|
|
76
|
+
- [ ] The server-reported version matches `mcp-server/package.json`
|
|
77
|
+
- [ ] CI fails if docs or packaged skill copies drift from the canonical source
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
87
81
|
### Priority 3 — Distribution
|
|
88
82
|
|
|
89
83
|
| Channel | Status | Next action |
|
|
90
84
|
|---------|--------|-------------|
|
|
91
85
|
| GitHub (public) | Ready to flip | Make repo public |
|
|
92
|
-
| npm (`clawskills-mcp`) | ✅ Live — v0.
|
|
86
|
+
| npm (`clawskills-mcp`) | ✅ Live — v0.3.4 | Maintain via `release.yml` |
|
|
93
87
|
| MCP registry listings | Not submitted | Submit to glama.ai, mcp.so, smithery.ai after public launch |
|
|
94
88
|
| Docs website | Planned | Mintlify — fastest path to SEO-friendly browsable docs |
|
|
95
89
|
| Lane A vs B | TBD | Revisit after first traction signals from public launch |
|
|
@@ -98,7 +92,7 @@ A weekly automated check that skill docs aren't stale and that key API patterns
|
|
|
98
92
|
|
|
99
93
|
### Priority 4 — Complete Phase 4 & 5 gaps
|
|
100
94
|
|
|
101
|
-
These are lower priority than
|
|
95
|
+
These are lower priority than freshness and packaging work, but worth finishing:
|
|
102
96
|
|
|
103
97
|
**Phase 4 gaps (Bulk operations):**
|
|
104
98
|
- Salesforce Bulk API v2: end-to-end CSV ingest tested at ≥500 rows with error-row reporting
|
package/skills/asana/skill.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Asana Skill
|
|
2
2
|
|
|
3
|
+
> **Last validated:** 2026-02-19 | **API:** Asana REST API 1.0
|
|
4
|
+
> **REST base URL:** `https://app.asana.com/api/1.0`
|
|
5
|
+
> **Assumed product:** Asana cloud. Enterprise controls, SCIM, and admin APIs may require additional scopes and plan-specific access.
|
|
6
|
+
|
|
3
7
|
## What this skill enables
|
|
4
8
|
|
|
5
9
|
- Automatically create, assign, and structure tasks from any external intake channel (forms, emails, Slack messages, webhook events) so work is captured without manual entry.
|