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 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
- // From dist/index.js → ../../skills (or src/index.ts → ../../skills)
17
- return path.resolve(__dirname, "../skills");
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: "0.1.0" }, { capabilities: { tools: {} } });
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: [
@@ -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.4",
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
- "prepack": "rm -rf ./skills && cp -r ../skills ./skills",
37
- "build": "tsc",
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-01)
15
+ ## Current state (as of 2026-03-10)
16
16
 
17
17
  ### What's shipped
18
18
 
19
19
  | Layer | Status |
20
20
  |-------|--------|
21
- | **11 skill docs** — Monday.com, Salesforce, Jira, Dynamics 365, HubSpot, ServiceNow, Zendesk, Asana, GitHub, Figma, Slack | ✅ Live |
22
- | **MCP server** — `clawskills-mcp` v0.2.3 on npm; `list_skills`, `get_skill`, `search_skills` | ✅ Live |
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 11 tools) | ✅ Live |
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 11 tools |
33
- | Phase 2 — High-Frequency Workflows | 6–12 recipes per tool | ✅ Complete — all 11 tools |
34
- | Phase 3 — Event-Driven & Real-Time | Webhook setup, signature verification, event handling | ✅ Complete — all 11 tools |
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 — Content expansion: 3 new skills
42
+ ### Priority 1 — Freshness and accuracy pipeline
43
43
 
44
- Each new skill follows the 11-section template, lives on a `skill/<name>` branch, and is validated by CI before merge.
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 — the real moat):**
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.2.3 | Maintain via `release.yml` |
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 new skills but worth finishing:
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
@@ -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.