ios-vibe-mcp01 0.1.2

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/README.md ADDED
@@ -0,0 +1,161 @@
1
+ # ios-vibe-mcp πŸš€
2
+
3
+ Transform any idea into a complete iOS application using AI in Cursor. Works with any LLM (Claude, GPT-4, Gemini, etc.).
4
+
5
+ `ios-vibe-mcp` is an MCP (Model Context Protocol) server designed for vibe-coding iOS apps with SwiftUI. It generates project specs, architecture plans, coding steps, UI/UX guidance and test strategies β€” all as Markdown files.
6
+
7
+ > Note: The tool is currently in MVP stage. The GitHub repository is private for now.
8
+
9
+ ---
10
+
11
+ ## πŸš€ Quick Start
12
+
13
+ ### Installation
14
+
15
+ Install and run with npx:
16
+
17
+ ```bash
18
+ npx ios-vibe-mcp01
19
+ ```
20
+
21
+ ### Add to Cursor
22
+
23
+ Add the following configuration to your Cursor `mcp.json` file and restart Cursor:
24
+
25
+ ```json
26
+ {
27
+ "mcpServers": {
28
+ "ios-vibe-factory": {
29
+ "command": "npx",
30
+ "args": ["-y", "ios-vibe-mcp01"]
31
+ }
32
+ }
33
+ }
34
+ ```
35
+
36
+ ## 🧠 Basic Usage (No JSON Required)
37
+
38
+ You don’t need to write JSON. Just type commands in plain text inside Cursor chat.
39
+
40
+ 1. Generate project blueprint
41
+
42
+ ```
43
+ plan: SwiftUI offline-first notes app with CoreData
44
+ ```
45
+
46
+ Creates: `PROJECT_BLUEPRINT.md`, `TODO.md`, `IOS_RULES.md`, `RUNBOOK.md`, `BACKLOG.md`.
47
+
48
+ 2. Create architecture plan
49
+
50
+ ```
51
+ architecture
52
+ ```
53
+
54
+ Creates: `STAGE_ARCHITECTURE.md`.
55
+
56
+ 3. Generate coding plan
57
+
58
+ ```
59
+ coding
60
+ ```
61
+
62
+ Creates: `STAGE_CODING.md`.
63
+
64
+ 4. Generate UI/UX guide
65
+
66
+ ```
67
+ uiux
68
+ ```
69
+
70
+ Creates: `STAGE_UIUX.md`.
71
+
72
+ 5. Generate test strategy
73
+
74
+ ```
75
+ test
76
+ ```
77
+
78
+ Creates: `STAGE_TEST.md`.
79
+
80
+ ## πŸ› οΈ Commands
81
+
82
+ - `plan: <idea>` β€” Generates full product blueprint (`PROJECT_BLUEPRINT.md`)
83
+ - `architecture` β€” Defines app structure & data layer (`STAGE_ARCHITECTURE.md`)
84
+ - `coding` β€” Feature-by-feature coding roadmap (`STAGE_CODING.md`)
85
+ - `uiux` β€” UX/UI checklist & design rules (`STAGE_UIUX.md`)
86
+ - `test` β€” Testing strategy & critical flows (`STAGE_TEST.md`)
87
+ - `review` β€” Consistency checks (`REVIEW_REPORT.md`)
88
+ - `ship` β€” App Store readiness checklist (`SHIP_CHECKLIST.md`)
89
+
90
+ ## 🌟 Key Features
91
+
92
+ - Command-based workflow for building iOS apps
93
+ - SwiftUI-first architecture
94
+ - Enforces MVVM + Repository pattern
95
+ - Offline-first behavior (no Firebase by default)
96
+
97
+ Generates: product spec, architecture spec, coding roadmap, UI/UX guide, test plan, App Store checklist.
98
+
99
+ ## πŸ—οΈ How It Works
100
+
101
+ Workflow: `plan β†’ architecture β†’ coding β†’ uiux β†’ test β†’ review β†’ ship` β€” each step generates a Markdown spec file and locks scope for the next step.
102
+
103
+ ### Files Generated
104
+
105
+ - `PROJECT_BLUEPRINT.md` β€” Full product definition
106
+ - `TODO.md` β€” Task list for entire app
107
+ - `IOS_RULES.md` β€” Enforced iOS architecture rules
108
+ - `RUNBOOK.md` β€” How to run and debug
109
+ - `BACKLOG.md` β€” Scope lock for new ideas
110
+ - `STAGE_ARCHITECTURE.md` β€” Folder structure + data layer
111
+ - `STAGE_CODING.md` β€” Feature-by-feature coding plan
112
+ - `STAGE_UIUX.md` β€” UX rules & components
113
+ - `STAGE_TEST.md` β€” Testing strategy
114
+ - `SHIP_CHECKLIST.md` β€” App Store readiness
115
+
116
+ ## πŸ“± Platforms Supported
117
+
118
+ - iOS (SwiftUI)
119
+
120
+ Storage:
121
+
122
+ - CoreData (default)
123
+ - SwiftData (experimental)
124
+
125
+ ## πŸ“‹ Requirements
126
+
127
+ - Node.js 18+
128
+ - Cursor IDE (with MCP enabled)
129
+ - Any LLM (Claude, GPT-4, Gemini, etc.)
130
+ - macOS + Xcode (for iOS development)
131
+
132
+ ## πŸ‘₯ Perfect For
133
+
134
+ - Beginners β€” Turn ideas into real iOS apps
135
+ - Developers β€” Speed up SwiftUI development
136
+ - Startups β€” Rapid MVP creation
137
+ - Students β€” Learn by building real apps
138
+ - Indie hackers β€” Vibe coding workflows
139
+
140
+ ## πŸ§ͺ Example Workflow
141
+
142
+ ```
143
+ plan: expense tracker app
144
+ architecture
145
+ coding
146
+ uiux
147
+ test
148
+ ship
149
+ ```
150
+
151
+ ## πŸ›‘οΈ License
152
+
153
+ MIT
154
+
155
+ ## πŸ‘€ Author
156
+
157
+ Talha Pakdil
158
+
159
+ GitHub: https://github.com/talhapakdil7
160
+
161
+ LinkedIn: https://www.linkedin.com/in/talhapakdil
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { registerIosVibeTool } from "./iosVibe.js";
5
+ const server = new McpServer({
6
+ name: "iOS Vibe Factory",
7
+ version: "0.1.0",
8
+ });
9
+ registerIosVibeTool(server);
10
+ async function main() {
11
+ const transport = new StdioServerTransport();
12
+ await server.connect(transport);
13
+ }
14
+ main().catch((err) => {
15
+ console.error("Fatal MCP server error:", err);
16
+ process.exit(1);
17
+ });
@@ -0,0 +1,113 @@
1
+ import { z } from "zod";
2
+ import { renderFilesForCommand } from "./templates.js";
3
+ import { validateWorkflow } from "./rules.js";
4
+ const CommandSchema = z.enum(["plan", "architecture", "coding", "uiux", "test", "review", "ship"]);
5
+ const InputSchema = z.object({
6
+ command: CommandSchema,
7
+ idea: z.string().optional(),
8
+ config: z
9
+ .object({
10
+ appName: z.string().default("MyApp"),
11
+ iosMin: z.string().default("17.0"),
12
+ storage: z.enum(["coredata", "swiftdata"]).default("coredata"),
13
+ tone: z.string().default("soft pink"),
14
+ constraints: z.array(z.string()).default(["offline-first", "no firebase", "mvvm", "repository"]),
15
+ })
16
+ .optional(),
17
+ state: z
18
+ .object({
19
+ projectBlueprintMd: z.string().optional(),
20
+ todoMd: z.string().optional(),
21
+ stageArchitectureMd: z.string().optional(),
22
+ stageCodingMd: z.string().optional(),
23
+ stageUiuxMd: z.string().optional(),
24
+ stageTestMd: z.string().optional(),
25
+ iosRulesMd: z.string().optional(),
26
+ runbookMd: z.string().optional(),
27
+ backlogMd: z.string().optional(),
28
+ })
29
+ .optional(),
30
+ });
31
+ /**
32
+ * Accepts both:
33
+ * 1) JSON input (object): { command: "plan", idea: "..." }
34
+ * 2) Human text input (string): "plan: ..." or "architecture" etc.
35
+ * Also supports { text: "plan: ..." } shape as a convenience.
36
+ */
37
+ function normalizeInput(raw) {
38
+ const text = typeof raw === "string"
39
+ ? raw
40
+ : raw && typeof raw === "object" && "text" in raw && typeof raw.text === "string"
41
+ ? raw.text
42
+ : null;
43
+ if (!text)
44
+ return raw;
45
+ const t = text.trim();
46
+ // plan: <idea>
47
+ const planMatch = t.match(/^plan\s*:\s*(.+)$/i);
48
+ if (planMatch) {
49
+ return { command: "plan", idea: planMatch[1].trim() };
50
+ }
51
+ // Single-word commands
52
+ const lower = t.toLowerCase();
53
+ const allowed = ["architecture", "coding", "uiux", "test", "review", "ship"];
54
+ if (allowed.includes(lower)) {
55
+ return { command: lower };
56
+ }
57
+ // If user writes just "plan" without idea, let workflow validator handle it
58
+ if (/^plan$/i.test(t)) {
59
+ return { command: "plan", idea: "" };
60
+ }
61
+ // Fallback: keep original raw so Zod can throw a clear error
62
+ return raw;
63
+ }
64
+ export function registerIosVibeTool(server) {
65
+ server.tool("ios_vibe", {
66
+ // Keep this permissive so the tool can accept either object inputs
67
+ // or "text" wrappers depending on the client
68
+ command: z.string().optional(),
69
+ idea: z.string().optional(),
70
+ config: z.any().optional(),
71
+ state: z.any().optional(),
72
+ text: z.string().optional(),
73
+ }, async (raw) => {
74
+ const normalized = normalizeInput(raw);
75
+ const parsed = InputSchema.safeParse(normalized);
76
+ if (!parsed.success) {
77
+ return {
78
+ content: [
79
+ {
80
+ type: "text",
81
+ text: `Invalid input: ${parsed.error.message}`,
82
+ },
83
+ ],
84
+ };
85
+ }
86
+ const input = parsed.data;
87
+ // 1) Workflow gatekeeping
88
+ const flow = validateWorkflow(input);
89
+ if (!flow.ok) {
90
+ return {
91
+ content: [
92
+ {
93
+ type: "text",
94
+ text: `Command blocked: ${flow.reason}\n\n` +
95
+ `Fix: ${flow.fix}\n\n` +
96
+ `Suggested next: ${flow.suggestedNext}`,
97
+ },
98
+ ],
99
+ };
100
+ }
101
+ // 2) Generate files
102
+ const result = renderFilesForCommand(input);
103
+ // 3) MCP output
104
+ return {
105
+ content: [
106
+ {
107
+ type: "text",
108
+ text: JSON.stringify(result, null, 2),
109
+ },
110
+ ],
111
+ };
112
+ });
113
+ }
package/dist/rules.js ADDED
@@ -0,0 +1,48 @@
1
+ export function validateWorkflow(input) {
2
+ const s = input.state ?? {};
3
+ if (input.command === "plan") {
4
+ if (!input.idea || input.idea.trim().length < 10) {
5
+ return {
6
+ ok: false,
7
+ reason: "`plan` requires a non-trivial `idea` (>= 10 chars).",
8
+ fix: "Call ios_vibe with { command: 'plan', idea: '...' }",
9
+ suggestedNext: "plan",
10
+ };
11
+ }
12
+ return { ok: true };
13
+ }
14
+ // plan sonrası her şey için blueprint şart
15
+ if (!s.projectBlueprintMd || s.projectBlueprintMd.trim().length < 50) {
16
+ return {
17
+ ok: false,
18
+ reason: "Missing PROJECT_BLUEPRINT.md state. Run `plan` first (or pass blueprint in state).",
19
+ fix: "Call `plan`, write PROJECT_BLUEPRINT.md to disk, then pass it back in `state.projectBlueprintMd`.",
20
+ suggestedNext: "plan",
21
+ };
22
+ }
23
+ if (input.command === "coding" && (!s.stageArchitectureMd || s.stageArchitectureMd.trim().length < 50)) {
24
+ return {
25
+ ok: false,
26
+ reason: "`coding` requires STAGE_ARCHITECTURE.md (architecture step).",
27
+ fix: "Run `architecture` first and pass the generated STAGE_ARCHITECTURE.md back in state.",
28
+ suggestedNext: "architecture",
29
+ };
30
+ }
31
+ if (input.command === "uiux" && (!s.stageCodingMd || s.stageCodingMd.trim().length < 50)) {
32
+ return {
33
+ ok: false,
34
+ reason: "`uiux` works best after `coding` (needs screen & component plan).",
35
+ fix: "Run `coding` first and pass STAGE_CODING.md back in state.",
36
+ suggestedNext: "coding",
37
+ };
38
+ }
39
+ if (input.command === "test" && (!s.stageCodingMd || s.stageCodingMd.trim().length < 50)) {
40
+ return {
41
+ ok: false,
42
+ reason: "`test` requires at least STAGE_CODING.md to know critical flows.",
43
+ fix: "Run `coding` first and pass STAGE_CODING.md back in state.",
44
+ suggestedNext: "coding",
45
+ };
46
+ }
47
+ return { ok: true };
48
+ }
@@ -0,0 +1,300 @@
1
+ const md = (s) => s.trim() + "\n";
2
+ export function renderFilesForCommand(input) {
3
+ const cfg = {
4
+ appName: input.config?.appName ?? "MyApp",
5
+ iosMin: input.config?.iosMin ?? "17.0",
6
+ storage: input.config?.storage ?? "coredata",
7
+ tone: input.config?.tone ?? "soft pink",
8
+ constraints: input.config?.constraints ?? ["offline-first", "no firebase", "mvvm", "repository"],
9
+ };
10
+ const files = [];
11
+ const warnings = [];
12
+ const iosRules = md(`
13
+ # IOS_RULES.md
14
+
15
+ ## Non-negotiables
16
+ - SwiftUI only
17
+ - MVVM + Repository pattern
18
+ - Storage: ${cfg.storage.toUpperCase()}
19
+ - Offline-first by default
20
+ - No Firebase (unless explicitly allowed)
21
+ - Every screen must define: Loading / Empty / Error states
22
+ - New feature requests go to BACKLOG.md (do not expand MVP silently)
23
+
24
+ ## Folder structure (fixed)
25
+ - App/
26
+ - Features/
27
+ - <Feature>/
28
+ - Views/
29
+ - ViewModels/
30
+ - Models/
31
+ - Core/
32
+ - DesignSystem/
33
+ - Persistence/
34
+ - Utilities/
35
+ - Resources/
36
+ - Tests/
37
+ `);
38
+ const runbook = md(`
39
+ # RUNBOOK.md
40
+
41
+ ## Requirements
42
+ - macOS + Xcode (CLI tools installed)
43
+ - iOS ${cfg.iosMin}+
44
+
45
+ ## How to run
46
+ - Open the Xcode project/workspace
47
+ - Select a simulator
48
+ - Run (Cmd+R)
49
+
50
+ ## Troubleshooting
51
+ - Build fails: check Signing settings (for device) or run on Simulator first
52
+ - If tests fail: run the failing test target only and re-check data seeding
53
+ `);
54
+ const backlog = md(`
55
+ # BACKLOG.md
56
+ New ideas go here. Do not expand MVP scope without explicitly moving items into TODO.md.
57
+ `);
58
+ // PLAN
59
+ if (input.command === "plan") {
60
+ const idea = input.idea ?? "";
61
+ const blueprint = md(`
62
+ # PROJECT_BLUEPRINT.md β€” ${cfg.appName}
63
+
64
+ ## Product snapshot
65
+ **One-liner:** ${idea}
66
+
67
+ ## Goals (MVP)
68
+ - Deliver the core value in the simplest possible way
69
+ - Offline-first experience
70
+ - Clean MVVM + Repository structure
71
+
72
+ ## Non-goals (Scope lock)
73
+ - Authentication / accounts
74
+ - Backend sync
75
+ - Social feed / chat
76
+ - Payments
77
+
78
+ ## Constraints
79
+ ${cfg.constraints.map((c) => `- ${c}`).join("\n")}
80
+
81
+ ## Target platform
82
+ - iOS ${cfg.iosMin}+
83
+ - SwiftUI
84
+
85
+ ## Screens (initial)
86
+ - Onboarding (optional): explain what app does
87
+ - Home: main action + list
88
+ - Detail: item details
89
+ - Profile/Settings: app preferences
90
+
91
+ ## Data model (draft)
92
+ - Entity: **UserProfile** (id, name, createdAt)
93
+ - Entity: **Item** (id, title, note, createdAt, updatedAt)
94
+
95
+ ## Navigation map
96
+ Onboarding β†’ Home β†’ Detail
97
+ Home β†’ Settings
98
+
99
+ ## Done criteria
100
+ - App runs on simulator
101
+ - Core flow works end-to-end offline
102
+ - Basic empty/error states exist
103
+ - TODO checklist completed
104
+ `);
105
+ const todo = md(`
106
+ # TODO.md
107
+
108
+ ## 0) Scope lock βœ…
109
+ - [ ] Confirm Goals + Non-goals
110
+ - [ ] Confirm screen list
111
+ - [ ] Confirm data model entities
112
+ - [ ] Confirm constraints
113
+
114
+ ## 1) Architecture
115
+ - [ ] Create folder structure (App/Features/Core/Resources/Tests)
116
+ - [ ] Setup ${cfg.storage.toUpperCase()} persistence layer
117
+ - [ ] Define Repository protocols
118
+ - [ ] Define Navigation skeleton
119
+
120
+ ## 2) Coding
121
+ - [ ] Implement Home (View + VM + Repo)
122
+ - [ ] Implement Detail (View + VM + Repo)
123
+ - [ ] Implement Settings/Profile
124
+ - [ ] Handle Loading/Empty/Error states
125
+
126
+ ## 3) UI/UX
127
+ - [ ] Define design tokens (spacing/typography)
128
+ - [ ] Build reusable components (PrimaryButton, EmptyStateView, etc.)
129
+ - [ ] Microcopy pass (onboarding + empty states)
130
+
131
+ ## 4) Test
132
+ - [ ] Unit tests for Repository + ViewModel
133
+ - [ ] 1 UI test for critical flow
134
+ - [ ] Final β€œship checklist”
135
+ `);
136
+ files.push({ path: "PROJECT_BLUEPRINT.md", content: blueprint }, { path: "TODO.md", content: todo }, { path: "IOS_RULES.md", content: iosRules }, { path: "RUNBOOK.md", content: runbook }, { path: "BACKLOG.md", content: backlog });
137
+ return {
138
+ files,
139
+ nextCommand: "architecture",
140
+ warnings,
141
+ };
142
+ }
143
+ // Always keep these
144
+ files.push({ path: "IOS_RULES.md", content: iosRules }, { path: "RUNBOOK.md", content: runbook }, { path: "BACKLOG.md", content: backlog });
145
+ if (input.command === "architecture") {
146
+ files.push({
147
+ path: "STAGE_ARCHITECTURE.md",
148
+ content: md(`
149
+ # STAGE_ARCHITECTURE.md
150
+
151
+ ## Architecture decisions
152
+ - SwiftUI + MVVM
153
+ - Repository layer between VM and persistence
154
+ - Persistence: ${cfg.storage.toUpperCase()}
155
+
156
+ ## Folder structure (create exactly)
157
+ - App/
158
+ - Features/
159
+ - Home/
160
+ - Detail/
161
+ - Settings/
162
+ - Core/
163
+ - Persistence/
164
+ - DesignSystem/
165
+ - Utilities/
166
+ - Resources/
167
+ - Tests/
168
+
169
+ ## TODO (Architecture)
170
+ - [ ] Create folders
171
+ - [ ] Create PersistenceController (${cfg.storage})
172
+ - [ ] Define ItemRepository protocol + default implementation
173
+ - [ ] Define UserProfileRepository protocol + default implementation
174
+ - [ ] Add app-level dependency container (simple struct)
175
+ - [ ] Define navigation routes
176
+ `),
177
+ });
178
+ return { files, nextCommand: "coding", warnings };
179
+ }
180
+ if (input.command === "coding") {
181
+ files.push({
182
+ path: "STAGE_CODING.md",
183
+ content: md(`
184
+ # STAGE_CODING.md
185
+
186
+ ## Implementation order (feature-by-feature)
187
+ 1) Persistence + repositories
188
+ 2) Home (list + create)
189
+ 3) Detail (view/edit/delete)
190
+ 4) Settings/Profile (basic)
191
+
192
+ ## TODO (Coding)
193
+ - [ ] Implement Core/Persistence stack
194
+ - [ ] Implement repositories (CRUD)
195
+ - [ ] HomeView + HomeViewModel
196
+ - [ ] DetailView + DetailViewModel
197
+ - [ ] SettingsView + SettingsViewModel
198
+ - [ ] Wire navigation + previews
199
+ - [ ] Edge states: Loading/Empty/Error
200
+ `),
201
+ });
202
+ return { files, nextCommand: "uiux", warnings };
203
+ }
204
+ if (input.command === "uiux") {
205
+ files.push({
206
+ path: "STAGE_UIUX.md",
207
+ content: md(`
208
+ # STAGE_UIUX.md
209
+
210
+ ## Visual direction
211
+ - Tone: ${cfg.tone}
212
+ - Simple, minimal, readable
213
+ - Components first
214
+
215
+ ## Screen checklist (must have)
216
+ For each screen:
217
+ - Purpose
218
+ - Primary action
219
+ - Empty state copy
220
+ - Error state copy
221
+ - Loading state UI
222
+
223
+ ## TODO (UI/UX)
224
+ - [ ] Define typography + spacing tokens
225
+ - [ ] Create reusable components:
226
+ - PrimaryButton
227
+ - EmptyStateView
228
+ - ErrorBanner
229
+ - CardRow
230
+ - [ ] Apply consistent navigation titles + toolbar actions
231
+ `),
232
+ });
233
+ return { files, nextCommand: "test", warnings };
234
+ }
235
+ if (input.command === "test") {
236
+ files.push({
237
+ path: "STAGE_TEST.md",
238
+ content: md(`
239
+ # STAGE_TEST.md
240
+
241
+ ## Test strategy
242
+ - Unit: repositories + view models
243
+ - UI: critical flow end-to-end
244
+
245
+ ## Critical flow (example)
246
+ Home β†’ create Item β†’ open Detail β†’ edit β†’ back β†’ delete
247
+
248
+ ## TODO (Tests)
249
+ - [ ] Repo unit tests: create/update/delete
250
+ - [ ] VM unit tests: state transitions (empty β†’ loaded)
251
+ - [ ] 1 UI test for critical flow
252
+ - [ ] Run through RUNBOOK and confirm ship readiness
253
+ `),
254
+ });
255
+ return { files, nextCommand: "review", warnings };
256
+ }
257
+ if (input.command === "review") {
258
+ files.push({
259
+ path: "REVIEW_REPORT.md",
260
+ content: md(`
261
+ # REVIEW_REPORT.md
262
+
263
+ ## Consistency checks
264
+ - [ ] Goals/Non-goals present
265
+ - [ ] Screen list matches coding plan
266
+ - [ ] Data model defined
267
+ - [ ] Architecture rules repeated in IOS_RULES.md
268
+ - [ ] TODO has checkboxes for all stages
269
+
270
+ ## Output
271
+ If anything is missing, add it to TODO.md and/or BACKLOG.md.
272
+ `),
273
+ });
274
+ return { files, nextCommand: "ship", warnings };
275
+ }
276
+ if (input.command === "ship") {
277
+ files.push({
278
+ path: "SHIP_CHECKLIST.md",
279
+ content: md(`
280
+ # SHIP_CHECKLIST.md
281
+
282
+ ## App Store readiness
283
+ - [ ] App name, subtitle, keywords
284
+ - [ ] Screenshots list (per device size)
285
+ - [ ] Privacy notes (data collected?)
286
+ - [ ] Permissions text (if any)
287
+ - [ ] Versioning + build number
288
+
289
+ ## Technical readiness
290
+ - [ ] No crash on cold start
291
+ - [ ] Works offline
292
+ - [ ] Tests pass
293
+ - [ ] Empty/error states done
294
+ `),
295
+ });
296
+ return { files, nextCommand: "plan", warnings };
297
+ }
298
+ warnings.push("Unknown command");
299
+ return { files, nextCommand: "plan", warnings };
300
+ }
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "ios-vibe-mcp01",
3
+ "version": "0.1.2",
4
+ "description": "MCP server for vibe coding iOS apps with command-based workflow (plan, architecture, coding, uiux, test)",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "ios-vibe-mcp01": "dist/index.js"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/talhapakdil7/ios-vibe-mcp"
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md",
17
+ "LICENSE"
18
+ ],
19
+ "engines": {
20
+ "node": ">=18"
21
+ },
22
+ "scripts": {
23
+ "build": "tsc -p tsconfig.json",
24
+ "prepublishOnly": "npm run build",
25
+ "start": "node dist/index.js"
26
+ },
27
+ "keywords": [
28
+ "mcp",
29
+ "cursor",
30
+ "ios",
31
+ "swiftui",
32
+ "vibe-coding",
33
+ "generator",
34
+ "ai-tools"
35
+ ],
36
+ "author": "Talha Pakdil",
37
+ "license": "MIT",
38
+ "dependencies": {
39
+ "@modelcontextprotocol/sdk": "^1.25.3",
40
+ "zod": "^4.3.6"
41
+ },
42
+ "devDependencies": {
43
+ "typescript": "^5.6.3",
44
+ "@types/node": "^20.11.30"
45
+ }
46
+ }