# Directory Structure ``` ├── .gitattributes ├── .gitignore ├── .vscode │ ├── launch.json │ ├── mcp.json │ └── tasks.json ├── package-lock.json ├── package.json ├── README.md ├── src │ ├── index.ts │ └── server.ts └── tsconfig.json ``` # Files -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- ``` # Auto detect text files and perform LF normalization * text=auto ``` -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- ``` .DS_Store logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* lerna-debug.log* .pnpm-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json # Runtime data pids *.pid *.seed *.pid.lock # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory used by tools like istanbul coverage *.lcov # nyc test coverage .nyc_output # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) .grunt # Bower dependency directory (https://bower.io/) bower_components # node-waf configuration .lock-wscript # Compiled binary addons (https://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules/ jspm_packages/ # Snowpack dependency directory (https://snowpack.dev/) web_modules/ # TypeScript cache *.tsbuildinfo # Optional npm cache directory .npm # Optional eslint cache .eslintcache # Optional stylelint cache .stylelintcache # Microbundle cache .rpt2_cache/ .rts2_cache_cjs/ .rts2_cache_es/ .rts2_cache_umd/ # Optional REPL history .node_repl_history # Output of 'npm pack' *.tgz # Yarn Integrity file .yarn-integrity # dotenv environment variable files .env .env.development.local .env.test.local .env.production.local .env.local # parcel-bundler cache (https://parceljs.org/) .cache .parcel-cache # Next.js build output .next out # Nuxt.js build / generate output .nuxt dist # Gatsby files .cache/ # Comment in the public line in if your project uses Gatsby and not Next.js # https://nextjs.org/blog/next-9-1#public-directory-support # public # vuepress build output .vuepress/dist # vuepress v2.x temp and cache directory .temp .cache # vitepress build output **/.vitepress/dist # vitepress cache directory **/.vitepress/cache # Docusaurus cache and generated files .docusaurus # Serverless directories .serverless/ # FuseBox cache .fusebox/ # DynamoDB Local files .dynamodb/ # TernJS port file .tern-port # Stores VSCode versions used for testing VSCode extensions .vscode-test # yarn v2 .yarn/cache .yarn/unplugged .yarn/build-state.yml .yarn/install-state.gz .pnp.* ``` -------------------------------------------------------------------------------- /.vscode/mcp.json: -------------------------------------------------------------------------------- ```json { "servers": { "grok2-image-mcp-server": { "type": "stdio", "command": "node", "args": ["${workspaceFolder}/dist/index.js"] } } } ``` -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- ```json { "version": "2.0.0", "tasks": [ { "type": "npm", "script": "watch", "problemMatcher": ["$tsc-watch"], "isBackground": true, "label": "npm: watch", "group": { "kind": "build", "isDefault": true } } ] } ``` -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- ```json { "compilerOptions": { "target": "ES2022", "module": "Node16", "moduleResolution": "Node16", "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "sourceMap": true }, "include": ["src/**/*"], "exclude": ["node_modules"] } ``` -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- ```typescript #!/usr/bin/env node import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createServer } from "./server.js"; async function main() { const server: McpServer = createServer(); const transport = new StdioServerTransport(); await server.connect(transport); console.debug("Grok2 Image MCP Server running on stdio"); } main().catch((error) => { console.error("Fatal error in main():", error); process.exit(1); }); ``` -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- ```json { "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Debug MCP Server", "skipFiles": ["<node_internals>/**"], "outFiles": ["${workspaceFolder}/dist/**/*.js"], "runtimeExecutable": "npx", "runtimeArgs": [ "-y", "@modelcontextprotocol/inspector", "node", "dist/index.js" ], "console": "integratedTerminal", "preLaunchTask": "npm: watch", "serverReadyAction": { "action": "openExternally", "pattern": "running at (https?://\\S+)", "uriFormat": "%s?timeout=60000" } } ] } ``` -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- ```json { "name": "grok2-image-mcp-server", "version": "0.1.5", "type": "module", "bin": { "grok2-image-mcp-server": "dist/index.js" }, "scripts": { "build": "tsc && shx chmod +x dist/index.js", "watch": "tsc --watch", "start": "node ./dist/index.js", "prepublishOnly": "npm run build" }, "files": [ "dist" ], "keywords": [ "mcp", "grok2", "image-generation", "model-context-protocol" ], "repository": { "type": "git", "url": "https://github.com/fl0w1nd/grok2-image-mcp-server" }, "author": "fl0w1nd", "license": "MIT", "description": "Grok2 Image MCP Server", "dependencies": { "@modelcontextprotocol/sdk": "^1.7.0", "undici": "^5.29.0", "zod": "^3.24.2" }, "devDependencies": { "@types/node": "^22.13.10", "shx": "^0.3.4", "typescript": "^5.8.2" }, "engines": { "node": ">=18.0.0" } } ```