@plaud-ai/mcp 0.1.28 → 0.1.30

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.
@@ -35,15 +35,23 @@ var SKILLS = [
35
35
  description: "Search and filter Plaud recordings by date, tag, or keyword",
36
36
  content: `## Plaud Skill: search-recordings
37
37
 
38
- When the user wants to find, browse, filter, or search their Plaud recordings, follow this workflow:
38
+ There is no server-side search or filter API. To find a recording, fetch all pages from \`list_files\` and match client-side.
39
39
 
40
- 1. Call \`list_files\` with the appropriate filters based on the user's request:
41
- - \`from\` / \`to\` \u2014 ISO 8601 date range (e.g. \`2026-04-01T00:00:00Z\`)
42
- - \`tag\` \u2014 filter by tag label
43
- - \`workspace_id\` \u2014 filter by workspace
44
- - \`limit\` \u2014 number of results to return
45
- 2. Present results in a clear list: recording name, date, duration, and file ID
46
- 3. If the user wants to narrow results, refine the filters and call again
40
+ **Step 1 \u2014 Collect search criteria**
41
+
42
+ If the user's request is vague, ask for more specific information before fetching:
43
+ - Approximate date or time range?
44
+ - Rough title or topic to look for in the name?
45
+
46
+ The more specific the criteria, the earlier a match can be found during pagination.
47
+
48
+ **Step 2 \u2014 Fetch pages and match**
49
+
50
+ Call \`list_files\` starting from page 1. For each page, check if any recording matches the user's criteria by name, date, or duration. Continue fetching subsequent pages until a match is found or all pages are exhausted.
51
+
52
+ **Step 3 \u2014 Present results**
53
+
54
+ Show a clear list of matches: recording name, date, duration, and file ID. If no match is found, tell the user and suggest refining the criteria.
47
55
 
48
56
  Do not fetch transcripts or notes unless the user explicitly asks to view the content of a specific recording.`
49
57
  },
@@ -105,6 +113,7 @@ Use date filters to scope the corpus (e.g., last week, last quarter, a specific
105
113
  },
106
114
  {
107
115
  name: "push-to-destination",
116
+ supported: false,
108
117
  description: "Send recording content or a generated artifact to Notion, HubSpot, Slack, Linear, or a webhook",
109
118
  content: `## Plaud Skill: push-to-destination
110
119
 
@@ -123,12 +132,13 @@ When the user wants to send recording content or a generated artifact to an exte
123
132
  Note: Destination credentials (API tokens, webhook URLs) must be provided by the user. Do not store them in conversation history \u2014 use environment variables or the user's config.`
124
133
  }
125
134
  ];
126
- var SKILLS_COMBINED = SKILLS.map((s) => s.content).join("\n\n---\n\n");
135
+ var ACTIVE_SKILLS = SKILLS.filter((s) => s.supported !== false);
136
+ var SKILLS_COMBINED = ACTIVE_SKILLS.map((s) => s.content).join("\n\n---\n\n");
127
137
 
128
138
  export {
129
139
  __commonJS,
130
140
  __export,
131
141
  __toESM,
132
- SKILLS,
142
+ ACTIVE_SKILLS,
133
143
  SKILLS_COMBINED
134
144
  };
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- SKILLS,
3
+ ACTIVE_SKILLS,
4
4
  __commonJS,
5
5
  __export,
6
6
  __toESM
7
- } from "./chunk-ET3HYWAC.js";
7
+ } from "./chunk-5JTZ7NKP.js";
8
8
 
9
9
  // ../../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js
10
10
  var require_code = __commonJS({
@@ -30699,8 +30699,12 @@ var OAuth = class {
30699
30699
  return null;
30700
30700
  if (tokenSet.expires_at && Date.now() > tokenSet.expires_at - 6e4) {
30701
30701
  if (tokenSet.refresh_token) {
30702
- const refreshed = await this.refresh(tokenSet.refresh_token);
30703
- return refreshed.access_token;
30702
+ try {
30703
+ const refreshed = await this.refresh(tokenSet.refresh_token);
30704
+ return refreshed.access_token;
30705
+ } catch {
30706
+ return null;
30707
+ }
30704
30708
  }
30705
30709
  return null;
30706
30710
  }
@@ -31020,34 +31024,34 @@ server.tool("logout", "Log out, sign out, revoke authorization, and disconnect f
31020
31024
  content: [{ type: "text", text: "Logged out and revoked authorization." }]
31021
31025
  };
31022
31026
  });
31023
- for (const skill of SKILLS) {
31027
+ for (const skill of ACTIVE_SKILLS) {
31024
31028
  server.prompt(skill.name, skill.description, () => ({
31025
31029
  messages: [{ role: "user", content: { type: "text", text: skill.content } }]
31026
31030
  }));
31027
31031
  }
31028
31032
  async function main() {
31029
31033
  if (process.argv[2] === "clean-plugin") {
31030
- const { runCleanPlugin } = await import("./setup-V6NJ4XKN.js");
31034
+ const { runCleanPlugin } = await import("./setup-3PYAGQRG.js");
31031
31035
  await runCleanPlugin();
31032
31036
  return;
31033
31037
  }
31034
31038
  if (process.argv[2] === "setup" && process.argv[3] === "codex") {
31035
- const { runSetupCodex } = await import("./setup-V6NJ4XKN.js");
31039
+ const { runSetupCodex } = await import("./setup-3PYAGQRG.js");
31036
31040
  await runSetupCodex();
31037
31041
  return;
31038
31042
  }
31039
31043
  if (process.argv[2] === "unsetup" && process.argv[3] === "codex") {
31040
- const { runUnsetupCodex } = await import("./setup-V6NJ4XKN.js");
31044
+ const { runUnsetupCodex } = await import("./setup-3PYAGQRG.js");
31041
31045
  await runUnsetupCodex();
31042
31046
  return;
31043
31047
  }
31044
31048
  if (process.argv[2] === "setup") {
31045
- const { runSetup } = await import("./setup-V6NJ4XKN.js");
31049
+ const { runSetup } = await import("./setup-3PYAGQRG.js");
31046
31050
  await runSetup();
31047
31051
  return;
31048
31052
  }
31049
31053
  if (process.argv[2] === "unsetup") {
31050
- const { runUnsetup } = await import("./setup-V6NJ4XKN.js");
31054
+ const { runUnsetup } = await import("./setup-3PYAGQRG.js");
31051
31055
  await runUnsetup();
31052
31056
  return;
31053
31057
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SKILLS_COMBINED
3
- } from "./chunk-ET3HYWAC.js";
3
+ } from "./chunk-5JTZ7NKP.js";
4
4
 
5
5
  // src/setup.ts
6
6
  import { readFile, writeFile, mkdir, rm } from "fs/promises";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plaud-ai/mcp",
3
- "version": "0.1.28",
3
+ "version": "0.1.30",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
package/plugin.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plaud",
3
- "version": "0.1.28",
3
+ "version": "0.1.30",
4
4
  "description": "Access your Plaud recordings in Claude",
5
5
  "author": {
6
6
  "name": "Plaud AI"