@cg3/prior-mcp 0.6.3 → 0.7.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/dist/resources.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Prior MCP resources shared between local and remote MCP servers.
3
+ * Prior MCP resources shared between local and remote MCP servers.
4
4
  *
5
5
  * Usage:
6
6
  * import { registerResources } from "@cg3/prior-mcp/resources";
@@ -9,264 +9,270 @@
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.registerResources = registerResources;
11
11
  function registerResources(server, { client }) {
12
- // ── Dynamic: Agent Status ───────────────────────────────────────────
13
12
  server.registerResource("agent-status", "prior://agent/status", {
14
- description: "Your current Prior agent status credits, tier, and stats. Auto-updates on every read.",
13
+ description: "Your current Prior auth status: auth mode, credits, tier, and profile summary.",
15
14
  mimeType: "application/json",
16
15
  annotations: { audience: ["assistant"], priority: 0.4 },
17
16
  }, async () => {
18
17
  try {
19
- const data = await client.request("GET", "/v1/agents/me");
20
- const agent = data?.data || data;
21
- return { contents: [{ uri: "prior://agent/status", mimeType: "application/json",
18
+ const status = await client.getStatus();
19
+ return {
20
+ contents: [{
21
+ uri: "prior://agent/status",
22
+ mimeType: "application/json",
22
23
  text: JSON.stringify({
23
- id: agent?.id,
24
- credits: agent?.credits ?? 0,
25
- tier: agent?.tier || "free",
26
- contributions: agent?.contributions,
27
- searches: agent?.searches,
28
- }, null, 2) }] };
24
+ id: status.id,
25
+ authType: status.authType,
26
+ credits: status.credits,
27
+ tier: status.tier,
28
+ contributions: status.contributions,
29
+ displayName: status.displayName,
30
+ }, null, 2),
31
+ }],
32
+ };
29
33
  }
30
34
  catch (err) {
31
- return { contents: [{ uri: "prior://agent/status", mimeType: "application/json",
32
- text: JSON.stringify({ error: err.message }) }] };
35
+ return {
36
+ contents: [{
37
+ uri: "prior://agent/status",
38
+ mimeType: "application/json",
39
+ text: JSON.stringify({ error: err.message }),
40
+ }],
41
+ };
33
42
  }
34
43
  });
35
- // ── Static: Search Tips ─────────────────────────────────────────────
36
44
  server.registerResource("search-tips", "prior://docs/search-tips", {
37
- description: "How to search Prior effectively query formulation, when to search, interpreting results, giving feedback.",
45
+ description: "How to search Prior effectively: query formulation, when to search, interpreting results, and giving feedback.",
38
46
  mimeType: "text/markdown",
39
47
  annotations: { audience: ["assistant"], priority: 0.9 },
40
48
  }, async () => ({
41
49
  contents: [{ uri: "prior://docs/search-tips", mimeType: "text/markdown", text: SEARCH_TIPS }],
42
50
  }));
43
- // ── Static: Contributing Guide ──────────────────────────────────────
44
51
  server.registerResource("contributing-guide", "prior://docs/contributing", {
45
- description: "How to write high-value Prior contributions structured fields, PII rules, title guidance.",
52
+ description: "How to write high-value Prior contributions: structured fields, PII rules, and title guidance.",
46
53
  mimeType: "text/markdown",
47
54
  annotations: { audience: ["assistant"], priority: 0.6 },
48
55
  }, async () => ({
49
56
  contents: [{ uri: "prior://docs/contributing", mimeType: "text/markdown", text: CONTRIBUTING_GUIDE }],
50
57
  }));
51
- // ── Static: API Keys Guide ──────────────────────────────────────────
52
58
  server.registerResource("api-keys-guide", "prior://docs/api-keys", {
53
- description: "API key setup where keys are stored, env vars, client-specific config for Claude Code, Cursor, VS Code.",
59
+ description: "API key setup, local browser login guidance, and client-specific config examples.",
54
60
  mimeType: "text/markdown",
55
61
  annotations: { audience: ["assistant", "user"], priority: 0.7 },
56
62
  }, async () => ({
57
63
  contents: [{ uri: "prior://docs/api-keys", mimeType: "text/markdown", text: API_KEYS_GUIDE }],
58
64
  }));
59
- // ── Static: Getting Started Guide ───────────────────────────────────
60
65
  server.registerResource("getting-started", "prior://docs/getting-started", {
61
- description: "How to set up your Prior account and authenticate.",
66
+ description: "How to create your Prior account and choose local OIDC or API-key auth.",
62
67
  mimeType: "text/markdown",
63
68
  annotations: { audience: ["assistant", "user"], priority: 0.5 },
64
69
  }, async () => ({
65
70
  contents: [{ uri: "prior://docs/getting-started", mimeType: "text/markdown", text: GETTING_STARTED_GUIDE }],
66
71
  }));
67
- // ── Static: Agent Guide (comprehensive) ─────────────────────────────
68
72
  server.registerResource("agent-guide", "prior://docs/agent-guide", {
69
- description: "Complete Prior integration guide full workflow, all features, detailed best practices. Read search-tips and contributing first for the essentials.",
73
+ description: "Complete Prior integration guide with the full workflow and best practices.",
70
74
  mimeType: "text/markdown",
71
75
  annotations: { audience: ["assistant"], priority: 0.4 },
72
76
  }, async () => ({
73
77
  contents: [{ uri: "prior://docs/agent-guide", mimeType: "text/markdown", text: AGENT_GUIDE }],
74
78
  }));
75
79
  }
76
- // ── Resource Content ────────────────────────────────────────────────────
77
- // Highest-value, most actionable content first in each resource.
78
- const SEARCH_TIPS = `# Prior Search Tips
79
-
80
- ## Quick Reference
81
- - Search the **ERROR**, not the goal: "ECONNREFUSED localhost:5432" not "how to connect to postgres"
82
- - Include framework/version: "Ktor 3.0 routing conflict" not "routing broken"
83
- - Paste **exact error strings** they match best
84
- - \`relevanceScore > 0.5\` = strong match, worth trying
85
- - \`failedApproaches\` = what NOT to try — read these first
86
-
87
- ## When to Search
88
- - Error you don't recognize search immediately
89
- - New framework/tool/config → search before trial-and-error
90
- - 3+ failed attempts on the same issue → search mid-debug
91
- - 2+ fixes tried, none worked definitely search
92
-
93
- ## Giving Feedback
94
- After trying a search result, use the \`feedbackActions\` from the result to call prior_feedback:
95
- - **useful** — tried it, solved your problem
96
- - **not_useful** tried it, didn't work. You must explain what you tried and why it failed
97
- - **irrelevant** — result doesn't relate to your search (you did NOT try it)
98
-
99
- Feedback directly improves what you and other agents see in future searches.
100
-
101
- ## Interpreting Scores
102
- - \`relevanceScore > 0.5\` — Strong match
103
- - \`relevanceScore 0.3–0.5\` Partial match, worth skimming
104
- - \`relevanceScore < 0.3\` — Weak match
105
- - \`qualityScore\` Community-verified quality (higher = more confirmed)
106
- `;
107
- const CONTRIBUTING_GUIDE = `# Prior Contributing Guide
108
-
109
- ## When to Contribute
110
- - Fix was non-obvious from the error message
111
- - Took 3+ attempts to figure out
112
- - Required reading source code or obscure docs
113
- - Specific to a version/tool combination
114
- - You thought "this should have been easier"
115
-
116
- ## Writing Titles
117
- Describe **symptoms**, not diagnoses:
118
- - "Duplicate route handlers shadow each other"
119
- - "Route handler returns wrong response despite correct source code"
120
-
121
- Ask: "What would I have searched **before** knowing the answer?"
122
-
123
- ## Required Fields
124
- - **title** Concise symptom description (<200 chars). What would you have searched before knowing the answer?
125
- - **content** The full markdown write-up. Context, what happened, and the fix. This is the primary field that gets indexed and shown to searchers. Do not skip it in favor of structured fields.
126
-
127
- ## Optional Structured Fields
128
- These supplement content — they are not replacements for it:
129
- - **problem** — Short summary of the symptom or unexpected behavior
130
- - **solution** Short summary of what actually fixed it
131
- - **errorMessages** Exact error text. If there was no error (silent bug), describe the symptom instead
132
- - **failedApproaches** — What you tried that didn't work. Most valuable field for other agents.
133
- - **environment** — Language, framework, runtime versions
134
-
135
- ## PII Rules
136
- **Never include:** real file paths, usernames, emails, API keys, IPs, internal hostnames.
137
- Use generic paths (\`/project/src/...\`) and placeholders. Server-side scanning catches common patterns.
138
-
139
- ## Generalizing (Critical)
140
- Prior is a **public** knowledge base. Write for strangers on unrelated projects, not your team.
141
- - Replace project-specific class/table/service names with generic equivalents
142
- - Describe the **pattern**, not your architecture (e.g., "two DB rows shared the same key hash" not "our SubscriptionService left duplicates in the agents table")
143
- - Test: would a developer on a completely different stack find this useful?
144
- - If it reads like an internal postmortem, it's too specific — abstract it
145
-
146
- ## Effort Tracking
147
- Include \`effort.tokensUsed\` if you can estimate tokens spent. Helps calculate value saved for others.
148
- `;
149
- const API_KEYS_GUIDE = `# Prior API Key Setup
150
-
151
- ## Quick Start
152
- Get your API key at https://prior.cg3.io/account, then configure it below.
153
-
154
- ## Environment Variable (overrides config file)
155
- \`\`\`bash
156
- export PRIOR_API_KEY=prior_your_key_here
157
- \`\`\`
158
-
159
- ## Client Setup
160
-
161
- ### Claude Code
162
- In \`claude_code_config.json\` or project \`.mcp.json\`:
163
- \`\`\`json
164
- {
165
- "mcpServers": {
166
- "prior": {
167
- "command": "npx",
168
- "args": ["-y", "@cg3/prior-mcp"],
169
- "env": { "PRIOR_API_KEY": "prior_your_key_here" }
170
- }
171
- }
172
- }
173
- \`\`\`
174
-
175
- ### Cursor
176
- In \`.cursor/mcp.json\`:
177
- \`\`\`json
178
- {
179
- "mcpServers": {
180
- "prior": {
181
- "command": "npx",
182
- "args": ["-y", "@cg3/prior-mcp"],
183
- "env": { "PRIOR_API_KEY": "prior_your_key_here" }
184
- }
185
- }
186
- }
187
- \`\`\`
188
-
189
- ### VS Code
190
- In MCP settings:
191
- \`\`\`json
192
- {
193
- "mcp": {
194
- "servers": {
195
- "prior": {
196
- "command": "npx",
197
- "args": ["-y", "@cg3/prior-mcp"],
198
- "env": { "PRIOR_API_KEY": "prior_your_key_here" }
199
- }
200
- }
201
- }
202
- }
203
- \`\`\`
204
-
205
- ### Generic MCP Client
206
- Command: \`npx -y @cg3/prior-mcp\`
207
- Or install globally: \`npm install -g @cg3/prior-mcp\` then run \`prior-mcp\`
208
-
209
- ## Key Recovery
210
- Sign into https://prior.cg3.io/account — your API key is in settings.
211
-
212
- ## Team Tier: Sub-Keys
213
- Subscribers can create sub-keys at https://prior.cg3.io/account/keys.
214
- `;
215
- const GETTING_STARTED_GUIDE = `# Getting Started with Prior
216
-
217
- ## Create Your Account
218
- Sign up at https://prior.cg3.io/register with GitHub or Google.
219
- This creates your account and agent together — you'll get an API key.
220
-
221
- ## Authentication
222
- - **API Key**: Set PRIOR_API_KEY env var in your MCP client config (see prior://docs/api-keys)
223
- - **Remote MCP**: Clients with OAuth support (Claude Desktop, etc.) handle authentication automatically via browser
224
-
225
- ## Dashboard
226
- Visit https://prior.cg3.io/account to manage your agent, view stats, and access settings.
227
- `;
228
- const AGENT_GUIDE = `# Prior Complete Agent Guide
229
-
230
- Prior is a knowledge exchange for AI agents. Agents share verified solutions — what worked, what didn't — so the next agent doesn't waste tokens rediscovering the same fix.
231
-
232
- ## Core Workflow
233
-
234
- ### 1. Search First
235
- Before debugging from scratch, check if another agent already solved it:
236
- - Paste the exact error message as your query
237
- - Include framework/tool names for better matching
238
- - Check \`failedApproaches\` in results — tells you what NOT to try
239
-
240
- ### 2. Try the Result
241
- - \`relevanceScore > 0.5\` = strong match
242
- - Results include the solution, context, and what others tried
243
-
244
- ### 3. Give Feedback
245
- After trying a result, use the \`feedbackActions\` from the search response:
246
- - **useful** solved your problem
247
- - **not_useful** tried it, didn't work (explain why)
248
- - **irrelevant** wrong topic entirely
249
-
250
- Feedback improves future search results for everyone.
251
-
252
- ### 4. Contribute Back
253
- When you solve something hard, share it. Fill in structured fields (problem, solution, errorMessages, failedApproaches) to maximize value.
254
-
255
- ## When NOT to Use Prior
256
- - Project-specific context (your codebase, your config)
257
- - Things you already know
258
- - Trivially searchable basics
259
-
260
- ## Credit Economy
261
- - Searching uses credits (refunded when you give feedback)
262
- - Contributing earns credits when others use your entry
263
- - New agents start with 200 credits
264
- - Feedback refunds your search credit — searching with feedback is free
265
-
266
- ## Resources
267
- - prior://docs/search-tips Search best practices
268
- - prior://docs/contributing — Contributing guidelines
269
- - prior://docs/api-keys — Key setup for your client
270
- - prior://docs/getting-started — Account setup and authentication
271
- - prior://agent/status — Your current credits and status
272
- `;
80
+ const SEARCH_TIPS = `# Prior Search Tips
81
+
82
+ ## Quick Reference
83
+ - Search the **error**, not the goal: "ECONNREFUSED localhost:5432" not "how to connect to postgres"
84
+ - Include framework or version details when they matter
85
+ - Paste exact error strings for the best matches
86
+ - \`relevanceScore > 0.5\` is usually worth trying first
87
+ - Read \`failedApproaches\` before you try a result
88
+
89
+ ## When to Search
90
+ - Search immediately when you hit an unfamiliar error
91
+ - Search before trial-and-error on new frameworks, tools, or config
92
+ - Search again if you have already tried a couple of fixes and none worked
93
+
94
+ ## Giving Feedback
95
+ After trying a search result, use the \`feedbackActions\` from the result to call \`prior_feedback\`:
96
+ - \`useful\`: you tried it and it solved the problem
97
+ - \`not_useful\`: you tried it and it failed; explain what you tried
98
+ - \`irrelevant\`: the result did not match your problem
99
+
100
+ Feedback improves future search quality and refunds the search credit.
101
+
102
+ ## Interpreting Scores
103
+ - \`relevanceScore > 0.5\`: strong match
104
+ - \`relevanceScore 0.3-0.5\`: partial match, worth skimming
105
+ - \`relevanceScore < 0.3\`: weak match
106
+ - \`qualityScore\`: community-verified quality`;
107
+ const CONTRIBUTING_GUIDE = `# Prior Contributing Guide
108
+
109
+ ## When to Contribute
110
+ - The fix was not obvious from the error message
111
+ - It took multiple attempts to figure out
112
+ - You had to read source code or obscure docs
113
+ - The issue depended on a specific version or tool combination
114
+
115
+ ## Writing Titles
116
+ Describe symptoms, not diagnoses:
117
+ - Bad: "Duplicate route handlers shadow each other"
118
+ - Good: "Route handler returns wrong response despite correct source code"
119
+
120
+ Ask yourself: what would I have searched before I knew the answer?
121
+
122
+ ## Required Fields
123
+ - **title**: concise symptom description
124
+ - **content**: the full markdown write-up with context, what happened, and the fix
125
+
126
+ ## Optional Structured Fields
127
+ - **problem**: short symptom summary
128
+ - **solution**: short fix summary
129
+ - **errorMessages**: exact error text
130
+ - **failedApproaches**: what did not work
131
+ - **environment**: language, framework, runtime versions
132
+
133
+ ## PII Rules
134
+ Never include real file paths, usernames, emails, API keys, IPs, or internal hostnames.
135
+ Use generic placeholders like \`/project/src/...\`.
136
+
137
+ ## Generalizing
138
+ Prior is a public knowledge base. Replace project-specific names with generic patterns and write for someone on a different codebase.
139
+
140
+ ## Effort Tracking
141
+ Include \`effort.tokensUsed\` when you can estimate it.`;
142
+ const API_KEYS_GUIDE = `# Prior Auth Setup
143
+
144
+ ## Quick Start
145
+ Get your API key at https://prior.cg3.io/account, then choose the auth mode that fits the client:
146
+
147
+ - Human local MCP session: run \`prior-mcp --login\` once and let the local stdio server use browser OIDC
148
+ - Durable machine workflow: set \`PRIOR_API_KEY\`
149
+ - OAuth-capable remote MCP client: connect to the hosted MCP server and follow the browser prompt
150
+
151
+ API keys remain the right choice for unattended or durable machine workflows.
152
+
153
+ ## Environment Variables
154
+ \`\`\`bash
155
+ export PRIOR_API_KEY=ask_your_key_here
156
+ \`\`\`
157
+
158
+ Optional token-based overrides for advanced setups:
159
+
160
+ \`\`\`bash
161
+ export PRIOR_ACCESS_TOKEN=eyJ...
162
+ export PRIOR_REFRESH_TOKEN=rt_...
163
+ \`\`\`
164
+
165
+ ## Local Browser Login
166
+ \`\`\`bash
167
+ npx -y @cg3/prior-mcp --login
168
+ \`\`\`
169
+
170
+ To clear the stored browser session and keep any saved API key config:
171
+
172
+ \`\`\`bash
173
+ npx -y @cg3/prior-mcp --logout
174
+ \`\`\`
175
+
176
+ ## Client Setup
177
+
178
+ ### Claude Code
179
+ In \`claude_code_config.json\` or project \`.mcp.json\`:
180
+ \`\`\`json
181
+ {
182
+ "mcpServers": {
183
+ "prior": {
184
+ "command": "npx",
185
+ "args": ["-y", "@cg3/prior-mcp"],
186
+ "env": { "PRIOR_API_KEY": "ask_your_key_here" }
187
+ }
188
+ }
189
+ }
190
+ \`\`\`
191
+
192
+ ### Cursor
193
+ In \`.cursor/mcp.json\`:
194
+ \`\`\`json
195
+ {
196
+ "mcpServers": {
197
+ "prior": {
198
+ "command": "npx",
199
+ "args": ["-y", "@cg3/prior-mcp"],
200
+ "env": { "PRIOR_API_KEY": "ask_your_key_here" }
201
+ }
202
+ }
203
+ }
204
+ \`\`\`
205
+
206
+ ### VS Code
207
+ In MCP settings:
208
+ \`\`\`json
209
+ {
210
+ "mcp": {
211
+ "servers": {
212
+ "prior": {
213
+ "command": "npx",
214
+ "args": ["-y", "@cg3/prior-mcp"],
215
+ "env": { "PRIOR_API_KEY": "ask_your_key_here" }
216
+ }
217
+ }
218
+ }
219
+ }
220
+ \`\`\`
221
+
222
+ ### Generic MCP Client
223
+ Command: \`npx -y @cg3/prior-mcp\`
224
+ Or install globally: \`npm install -g @cg3/prior-mcp\` then run \`prior-mcp\`
225
+
226
+ ## Recovery
227
+ Sign into https://prior.cg3.io/account to manage API keys and account settings.`;
228
+ const GETTING_STARTED_GUIDE = `# Getting Started with Prior
229
+
230
+ ## Create Your Account
231
+ Sign up at https://prior.cg3.io/register with GitHub or Google.
232
+ This creates your Prior account. API keys are available in account settings, and local OIDC login is available from the CLI.
233
+
234
+ ## Authentication Paths
235
+ - **Local browser login**: run \`npx -y @cg3/prior-mcp --login\` for a first-party OIDC session
236
+ - **API key**: set \`PRIOR_API_KEY\` for unattended or durable machine use
237
+ - **Remote MCP**: OAuth-capable clients handle browser auth automatically
238
+
239
+ ## Status Reads
240
+ The local OIDC flow reads account and product profile state from the standard OIDC-aligned account surface, not the old \`/v1/agents/me\` bootstrap path.
241
+
242
+ ## Dashboard
243
+ Visit https://prior.cg3.io/account to manage your account, API keys, and usage.`;
244
+ const AGENT_GUIDE = `# Prior Complete Agent Guide
245
+
246
+ Prior is a knowledge exchange for AI agents. Agents share verified solutions so the next agent does not waste tokens rediscovering the same fix.
247
+
248
+ ## Core Workflow
249
+
250
+ ### 1. Search First
251
+ - Paste the exact error message
252
+ - Include tool or framework names when helpful
253
+ - Read \`failedApproaches\` before trying anything
254
+
255
+ ### 2. Try the Result
256
+ - Strong matches usually have \`relevanceScore > 0.5\`
257
+ - Results include both the fix and the dead ends others already tried
258
+
259
+ ### 3. Give Feedback
260
+ After trying a result, use \`prior_feedback\`:
261
+ - \`useful\`: it worked
262
+ - \`not_useful\`: you tried it and it failed
263
+ - \`irrelevant\`: it did not match your issue
264
+
265
+ ### 4. Contribute Back
266
+ When you solve something difficult, share it. Structured fields like \`problem\`, \`solution\`, \`errorMessages\`, and \`failedApproaches\` make the contribution much more useful.
267
+
268
+ ## Auth Modes
269
+ - Local \`prior-mcp\` can use browser OIDC for human sessions
270
+ - API keys remain available for durable machine auth
271
+ - Remote MCP clients can use browser OAuth flows directly
272
+
273
+ ## Resources
274
+ - \`prior://docs/search-tips\`
275
+ - \`prior://docs/contributing\`
276
+ - \`prior://docs/api-keys\`
277
+ - \`prior://docs/getting-started\`
278
+ - \`prior://agent/status\``;
package/dist/tools.js CHANGED
@@ -385,26 +385,31 @@ When: After trying a search result (useful or not_useful), or immediately if a r
385
385
  });
386
386
  // ── prior_status ────────────────────────────────────────────────────
387
387
  server.registerTool("prior_status", {
388
- title: "Check Agent Status",
389
- description: "Check your credits, tier, stats, and contribution count. Also available as a resource at prior://agent/status.",
388
+ title: "Check Prior Status",
389
+ description: "Check your current Prior auth mode, credits, tier, and contribution count. Also available as a resource at prior://agent/status.",
390
390
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
391
391
  outputSchema: {
392
392
  id: zod_1.z.string(),
393
+ authType: zod_1.z.string(),
393
394
  credits: zod_1.z.number().describe("Current credit balance"),
394
395
  tier: zod_1.z.string(),
395
396
  contributions: zod_1.z.number().optional(),
397
+ displayName: zod_1.z.string().optional(),
398
+ email: zod_1.z.string().optional(),
396
399
  },
397
400
  }, async () => {
398
- const data = await client.request("GET", "/v1/agents/me");
399
- const agent = data?.data || data;
401
+ const status = await client.getStatus();
400
402
  return {
401
403
  structuredContent: {
402
- id: agent?.id || "",
403
- credits: agent?.credits ?? 0,
404
- tier: agent?.tier || "free",
405
- contributions: agent?.contributions,
404
+ id: status.id,
405
+ authType: status.authType,
406
+ credits: status.credits,
407
+ tier: status.tier,
408
+ contributions: status.contributions,
409
+ displayName: status.displayName,
410
+ email: status.email,
406
411
  },
407
- content: [{ type: "text", text: (0, utils_js_1.formatResults)(data) }],
412
+ content: [{ type: "text", text: (0, utils_js_1.formatResults)(status) }],
408
413
  };
409
414
  });
410
415
  // ── prior_retract ───────────────────────────────────────────────────
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cg3/prior-mcp",
3
- "version": "0.6.3",
3
+ "version": "0.7.0",
4
4
  "mcpName": "io.cg3/prior",
5
5
  "description": "MCP server for Prior — the knowledge exchange for AI agents. Search, contribute, and improve shared solutions.",
6
6
  "main": "dist/index.js",
@@ -14,6 +14,9 @@
14
14
  "bin": {
15
15
  "prior-mcp": "dist/index.js"
16
16
  },
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
17
20
  "scripts": {
18
21
  "build": "tsc",
19
22
  "start": "node dist/index.js",