yorck-mcp 0.1.4 → 0.1.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yorck-mcp",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -38,5 +38,14 @@
38
38
  "bin",
39
39
  "src",
40
40
  "README.md"
41
- ]
41
+ ],
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "git+https://github.com/Mahir-Isikli/yorck-mcp.git"
45
+ },
46
+ "homepage": "https://yorck-mcp.isiklimahir.workers.dev",
47
+ "bugs": {
48
+ "url": "https://github.com/Mahir-Isikli/yorck-mcp/issues"
49
+ },
50
+ "license": "MIT"
42
51
  }
package/src/cli.ts CHANGED
@@ -9,7 +9,7 @@ import { findSeatByRowAndId, getSeatPlan, renderSeatPlanHtml, renderSeatPlanSvg
9
9
  import { cancelOrder, commitOrder, reserveUnlimited } from "./yorck/booking.ts";
10
10
  import { showtimeToIcs } from "./lib/ics.ts";
11
11
  import { whoAmI } from "./yorck/auth.ts";
12
- import { YORCK_MOVIE_AGENT_SKILL } from "./skill-content.ts";
12
+ import { CLAUDE_CODE_BOOTSTRAP_PROMPT, YORCK_MOVIE_AGENT_SKILL } from "./skill-content.ts";
13
13
 
14
14
  const PUBLIC_MCP_URL = "https://yorck-mcp.isiklimahir.workers.dev/public/mcp";
15
15
 
@@ -450,6 +450,16 @@ async function commandSkill(args: ParsedArgs) {
450
450
  }
451
451
  }
452
452
 
453
+ async function commandClaudeCodePrompt(args: ParsedArgs) {
454
+ const out = str(args, "out");
455
+ if (out) {
456
+ await writeFile(out, CLAUDE_CODE_BOOTSTRAP_PROMPT, "utf8");
457
+ console.log(`Wrote ${out}`);
458
+ } else {
459
+ process.stdout.write(CLAUDE_CODE_BOOTSTRAP_PROMPT);
460
+ }
461
+ }
462
+
453
463
  async function commandInstallSkill(args: ParsedArgs) {
454
464
  const target = (str(args, "target") || "claude").toLowerCase();
455
465
  const home = process.env.HOME || process.cwd();
@@ -525,6 +535,7 @@ Usage:
525
535
  yorck mcp-stdio
526
536
  yorck mcp-config [--private]
527
537
  yorck skill [--out SKILL.md]
538
+ yorck claude-code-prompt [--out prompt.md]
528
539
  yorck install-skill [--target claude|pi|both]
529
540
 
530
541
  Public commands need no account. Booking commands need Yorck credentials and an Unlimited card number.
@@ -573,6 +584,9 @@ async function main() {
573
584
  return commandMcpConfig(args);
574
585
  case "skill":
575
586
  return commandSkill(args);
587
+ case "claude-code-prompt":
588
+ case "bootstrap-prompt":
589
+ return commandClaudeCodePrompt(args);
576
590
  case "install-skill":
577
591
  return commandInstallSkill(args);
578
592
  case "mcp-stdio":
package/src/index.ts CHANGED
@@ -7,7 +7,7 @@ import { reserveUnlimited, cancelOrder, getOrder } from "./yorck/booking.ts";
7
7
  import { whoAmI } from "./yorck/auth.ts";
8
8
  import { showtimeToIcs } from "./lib/ics.ts";
9
9
  import { PublicYorckMcp, YorckMcp } from "./mcp.ts";
10
- import { installScript, skillZip, YORCK_MOVIE_AGENT_SKILL } from "./skill-content.ts";
10
+ import { CLAUDE_CODE_BOOTSTRAP_PROMPT, installScript, skillZip, YORCK_MOVIE_AGENT_SKILL } from "./skill-content.ts";
11
11
  import { landingPage } from "./landing.ts";
12
12
 
13
13
  export { PublicYorckMcp, YorckMcp };
@@ -42,6 +42,8 @@ app.get("/skill/SKILL.md", (c) => c.text(YORCK_MOVIE_AGENT_SKILL, 200, { "Conten
42
42
 
43
43
  app.get("/install.sh", (c) => c.text(installScript("https://yorck-mcp.isiklimahir.workers.dev"), 200, { "Content-Type": "text/x-shellscript; charset=utf-8" }));
44
44
 
45
+ app.get("/claude-code-prompt.md", (c) => c.text(CLAUDE_CODE_BOOTSTRAP_PROMPT, 200, { "Content-Type": "text/markdown; charset=utf-8" }));
46
+
45
47
  app.get("/skill.zip", () => {
46
48
  const zip = skillZip();
47
49
  const body = zip.buffer.slice(zip.byteOffset, zip.byteOffset + zip.byteLength) as ArrayBuffer;
package/src/landing.ts CHANGED
@@ -14,7 +14,7 @@ export function landingPage(): string {
14
14
  </head>
15
15
  <body>
16
16
  <main>
17
- <nav class="nav"><div class="brand">yorck-mcp</div><div class="links"><a class="pill" href="/public/mcp">public MCP</a><a class="pill" href="/skill/SKILL.md">SKILL.md</a><a class="pill" href="/skill.zip">skill.zip</a><a class="pill" href="/install.sh">install.sh</a><a class="pill" href="https://www.npmjs.com/package/yorck-mcp">npm</a></div></nav>
17
+ <nav class="nav"><div class="brand">yorck-mcp</div><div class="links"><a class="pill" href="/public/mcp">public MCP</a><a class="pill" href="/claude-code-prompt.md">Claude Code prompt</a><a class="pill" href="/skill/SKILL.md">SKILL.md</a><a class="pill" href="/skill.zip">skill.zip</a><a class="pill" href="https://github.com/Mahir-Isikli/yorck-mcp">GitHub</a><a class="pill" href="https://www.npmjs.com/package/yorck-mcp">npm</a></div></nav>
18
18
  <section class="hero">
19
19
  <div>
20
20
  <div class="eyebrow">Berlin cinema for agents</div>
@@ -41,6 +41,7 @@ export function landingPage(): string {
41
41
  <div class="install-grid">
42
42
  <div class="tabs">
43
43
  <button class="tab active" data-tab="claude-web">Claude Web connector</button>
44
+ <button class="tab" data-tab="claude-code-prompt">Claude Code prompt</button>
44
45
  <button class="tab" data-tab="claude-code-public">Claude Code public</button>
45
46
  <button class="tab" data-tab="claude-code-private">Claude Code private</button>
46
47
  <button class="tab" data-tab="skill">Claude skill</button>
@@ -48,7 +49,8 @@ export function landingPage(): string {
48
49
  <button class="tab" data-tab="html">Inline HTML fallback</button>
49
50
  </div>
50
51
  <div>
51
- <div class="panel active" id="claude-web"><h3>Claude Web / custom connector</h3><p>Customize → Connectors → Add custom connector, then paste:</p><pre class="screen"><button class="copy">copy</button>https://yorck-mcp.isiklimahir.workers.dev/public/mcp</pre></div>
52
+ <div class="panel active" id="claude-web"><h3>Claude Web / custom connector</h3><p>Customize → Connectors → Add custom connector, then paste:</p><pre class="screen"><button class="copy">copy</button>https://yorck-mcp.isiklimahir.workers.dev/public/mcp</pre><p>Then upload the skill ZIP from <a href="/skill.zip">/skill.zip</a> under Customize → Skills.</p></div>
53
+ <div class="panel" id="claude-code-prompt"><h3>Claude Code bootstrap prompt</h3><p>Paste this into Claude Code and let it install the repo, npm package, skill, and MCP config for you.</p><pre class="screen"><button class="copy">copy</button>curl -fsSL https://yorck-mcp.isiklimahir.workers.dev/claude-code-prompt.md</pre><p>Or open <a href="/claude-code-prompt.md">the prompt</a> and copy it.</p></div>
52
54
  <div class="panel" id="claude-code-public"><h3>Claude Code, public tools</h3><pre class="screen"><button class="copy">copy</button>claude mcp add --transport http yorck https://yorck-mcp.isiklimahir.workers.dev/public/mcp</pre></div>
53
55
  <div class="panel" id="claude-code-private"><h3>Claude Code, local bookable MCP</h3><pre class="screen"><button class="copy">copy</button>claude mcp add --transport stdio \\
54
56
  --env YORCK_EMAIL=you@example.com \\
@@ -154,6 +154,67 @@ export function skillZip(): Uint8Array {
154
154
  return out;
155
155
  }
156
156
 
157
+ export const CLAUDE_CODE_BOOTSTRAP_PROMPT = `# Install the Yorck Movie Agent in Claude Code
158
+
159
+ You are helping me install the Yorck Movie Agent from the public repo and npm package.
160
+
161
+ Public repo:
162
+
163
+ https://github.com/Mahir-Isikli/yorck-mcp
164
+
165
+ Install page:
166
+
167
+ https://yorck-mcp.isiklimahir.workers.dev
168
+
169
+ NPM package:
170
+
171
+ \`\`\`bash
172
+ npx -y yorck-mcp@latest
173
+ \`\`\`
174
+
175
+ Please do the following:
176
+
177
+ 1. Read the public repo README or install page so you understand the package.
178
+ 2. Install the Claude Code skill locally:
179
+
180
+ \`\`\`bash
181
+ npx -y yorck-mcp@latest install-skill --target claude
182
+ \`\`\`
183
+
184
+ 3. Add the public read-only MCP server to Claude Code:
185
+
186
+ \`\`\`bash
187
+ claude mcp add --transport http yorck https://yorck-mcp.isiklimahir.workers.dev/public/mcp
188
+ \`\`\`
189
+
190
+ 4. Smoke-test the CLI:
191
+
192
+ \`\`\`bash
193
+ npx -y yorck-mcp@latest whats-on --when tonight --after 18:00 --limit 3
194
+ \`\`\`
195
+
196
+ 5. If I ask for a seat map and SVG/image output does not render in this environment, use the HTML fallback:
197
+
198
+ \`\`\`bash
199
+ npx -y yorck-mcp@latest seat-map-html <session-id> --out seat-map.html
200
+ open seat-map.html
201
+ \`\`\`
202
+
203
+ 6. If I want private automated booking, do not collect secrets into chat. Instead explain that I should configure the local MCP with environment variables:
204
+
205
+ \`\`\`bash
206
+ claude mcp add --transport stdio \\
207
+ --env YORCK_EMAIL=you@example.com \\
208
+ --env YORCK_PASSWORD=your-password \\
209
+ --env YORCK_UNLIMITED_CARD=your-card-number \\
210
+ yorck-private -- npx -y yorck-mcp@latest mcp-stdio
211
+ \`\`\`
212
+
213
+ 7. Never claim a ticket was booked or a calendar event was created unless a tool actually succeeded. Booking must require explicit confirmation.
214
+
215
+ After installing, tell me exactly what you changed and how to test it with one prompt like: "find original-language Yorck movies tonight after 7 and show me the best seat map".
216
+ `;
217
+
157
218
  export function installScript(baseUrl = "https://yorck-mcp.isiklimahir.workers.dev") {
158
219
  return `#!/usr/bin/env bash
159
220
  set -euo pipefail