Generate custom tattoo designs in various styles and search a public gallery using AI agents.
Also known as ciroartz/inkstudioai-cli, inkstudioai-cli, inkstudioai
- Stars
- 1
- Tools
- —
- Downloads, 30 days
- —
- Latest version
- 0.1.1
- Last commit
- Oct 24, 2026
- License
- MIT
What is Ink Studio AI MCP?
Ink Studio AI generates custom tattoo designs in various styles and search a public gallery using AI agents.
Summary generated from the project's README
About Ink Studio AI MCP server
Ink Studio AI provides a specialized tool for generating custom tattoo designs through text descriptions. It is designed for developers and users who want to integrate artistic creation into their terminal or AI workflows. The server supports various artistic styles, including fine line, Japanese, traditional, and realism, allowing for highly specific visual outputs.
Users can interact with the service via a command line interface or by connecting it as an MCP server to AI agents like Claude, Cursor, and Windsurf. The setup requires Node.js and can be authenticated through a browser-based login or by providing an API key. Once connected, agents can use tools like generate_tattoo to create images, list_styles to browse options, and search_gallery to find inspiration from a public collection of existing designs.
What you can do with it
- 1Generate custom tattoo artAsk an AI agent to create a specific tattoo design based on a text prompt and a chosen style.
- 2Browse existing tattoo ideasSearch through a public gallery of tattoo designs to find visual inspiration.
- 3Manage subscription and creditsCheck your current plan status and remaining design credits directly through the agent.
- 4Automate design creation via scriptsUse the command line with JSON output to integrate tattoo generation into automated workflows.
Written from the project's README. Every use case is checked against a quote from it.
How to install Ink Studio AI MCP
Formats verified 10 Nov 2026Install Ink Studio AI MCP in Claude Code
$ claude mcp add --env INKSTUDIO_API_KEY=<YOUR_INKSTUDIO_API_KEY> inkstudioai-cli -- npx -y inkstudioaiInstall Ink Studio AI MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"inkstudioai-cli": {
"command": "npx",
"args": [
"-y",
"inkstudioai"
],
"env": {
"INKSTUDIO_API_KEY": "<YOUR_INKSTUDIO_API_KEY>"
}
}
}
}Install Ink Studio AI MCP in VS Code
.vscode/mcp.json
{
"servers": {
"inkstudioai-cli": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"inkstudioai"
],
"env": {
"INKSTUDIO_API_KEY": "<YOUR_INKSTUDIO_API_KEY>"
}
}
}
}Install Ink Studio AI MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"inkstudioai-cli": {
"command": "npx",
"args": [
"-y",
"inkstudioai"
],
"env": {
"INKSTUDIO_API_KEY": "<YOUR_INKSTUDIO_API_KEY>"
}
}
}
}Install Ink Studio AI MCP in Codex
~/.codex/config.toml
[mcp_servers.inkstudioai-cli] command = "npx" args = ["-y", "inkstudioai"] [mcp_servers.inkstudioai-cli.env] INKSTUDIO_API_KEY = "<YOUR_INKSTUDIO_API_KEY>"
Install Ink Studio AI MCP in Gemini CLI
~/.gemini/settings.json
{
"mcpServers": {
"inkstudioai-cli": {
"command": "npx",
"args": [
"-y",
"inkstudioai"
],
"env": {
"INKSTUDIO_API_KEY": "<YOUR_INKSTUDIO_API_KEY>"
}
}
}
}Configuration
INKSTUDIO_API_KEYSecretInk Studio AI API key (isk_...). Optional: without it, call the login tool to sign in.
| Name | Description | |
|---|---|---|
| INKSTUDIO_API_KEY | Ink Studio AI API key (isk_...). Optional: without it, call the login tool to sign in. | Secret |
Automated checks
Ran Nov 13, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachableciroartz/inkstudioai-cli is public and reachablegithub.com/ciroartz/inkstudioai-cli ↗Pass
- Package names this repository as its sourceinkstudioai names ciroartz/inkstudioai-cli as sourcenpmjs.com/package/inkstudioai ↗Pass
- Build provenance (Sigstore attestation)Sigstore attestation for inkstudioainpmjs.com/package/inkstudioai/v/0.1.1#provenance ↗Pass
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit or release 2026-10-24github.com/ciroartz/inkstudioai-cli ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNo popular package one edit away from inkstudioaiPass
- No critical advisory in the package or its dependencies1 resolved dependencies checked; no critical advisoryosv.dev ↗Pass
- No hidden instructions to the model0 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNot checked
- Remote endpoint answers the MCP handshakeNot checked
README
View on GitHubinkstudioai
AI tattoo generator for your terminal and your AI agents.
One free design for new accounts, no card needed.
inkstudioai is the official command line tool for Ink Studio AI. Describe a tattoo in words and get a finished design as an image file. It also runs as an MCP server, so Claude, Cursor, Windsurf, and other AI agents can create tattoo designs for you.
- Create tattoo designs from text in styles such as fine line, Japanese, traditional, and realism.
- Search the public gallery of tattoo designs for ideas, with no account.
- Check your plan and credits, and buy a plan from the terminal.
- Zero dependencies. Node.js 18.17 or newer.
Install
Run it once with npx:
npx inkstudioai login
Or install it globally:
npm i -g inkstudioai
The package installs two command names, inkstudioai and the shorter inkstudio. They are the same tool.
Quick start
# 1. Sign in. No account yet? Create one in the browser. New accounts get one free design.
npx inkstudioai login
# 2. Create a design. The image is saved in the current directory.
npx inkstudioai generate "a fox sleeping inside a crescent moon" --style fine-line
# 3. Look for ideas in the public gallery.
npx inkstudioai gallery dragon
Output of generate with the free design of a new account:
✔ Design ready in 21s
File a-fox-sleeping-inside-a-crescent-moon.webp
Image https://cdn.inkstudioai.com/free-tattoo-designs/6718f0c2.webp
Style fine-line, black ink, white background
Quality free (0 free designs left)
Saved to https://inkstudioai.com/account?view=tattoos&utm_source=cli&utm_medium=referral
Try it on your skin https://inkstudioai.com/tools/try-tattoo?design=https%3A%2F%2Fcdn.inkstudioai.com%2F...
Make a stencil https://inkstudioai.com/tools/tattoo-to-stencil?utm_source=cli&utm_medium=referral
The try-on link opens the website's tattoo simulator with the new design loaded. Links to website pages carry utm_source=cli, so Ink Studio AI can count visits from the CLI. Image, API, and checkout links have no such parameters.
Commands
Every command has --help, and inkstudioai help <command> shows the same text. Global options:
| Option | What it does |
|---|---|
--json |
Print raw JSON for scripts and agents |
--api-key <key> |
Use this key instead of INKSTUDIO_API_KEY or the saved key |
--no-color |
Turn off colors. NO_COLOR also works |
-h, --help |
Show help |
-v, --version |
Show the version |
login
Sign in with your browser. The terminal shows a code and opens a page. Check that the page shows the same code, then approve. The CLI saves an API key on your computer.
New to Ink Studio AI? Create an account on the same page. New accounts get one free tattoo design.
inkstudioai login
inkstudioai login --no-browser # print the link, do not open a browser
inkstudioai login --key isk_... # save a key from your account page
echo "$KEY" | inkstudioai login --with-key
In a terminal, --with-key asks you to paste the key and press Enter.
generate (alias: gen)
Create a tattoo design from a text prompt.
inkstudioai generate "a fox in a crescent moon"
inkstudioai gen "koi fish with waves" --style japanese --color
inkstudioai gen "rose and dagger" --skin --open
inkstudioai gen "minimal mountain range" --out designs/
inkstudioai gen "lotus flower" --out lotus.webp
inkstudioai gen "compass rose" --negative "text, letters" --no-save
inkstudioai gen "lotus flower" --out lotus.webp --force # replace lotus.webp
| Option | What it does |
|---|---|
-s, --style <id> |
Style id from inkstudioai styles. Default: minimal |
-c, --color |
Color ink. Default: black ink |
--skin |
Show the design on skin instead of a white background |
--negative <text> |
Things to leave out of the design |
-o, --out <path> |
File or directory for the image. Default: the current directory |
--force |
Overwrite the --out file if it exists |
--no-save |
Do not download the image, only print its URL |
--open |
Open the image when it is ready |
Without --out, or with a directory, the file name comes from the prompt, for example a-fox-in-a-crescent-moon.webp. An existing file is never overwritten; the CLI adds -2, -3, and so on.
With --out <file>, the CLI refuses to overwrite an existing file unless you add --force. The extension always matches the image type that the server sends: --out lotus.png saves lotus.webp when the image is WebP, and the CLI tells you. The File line and the file field of --json show the real name.
If you have no free design left and no plan, generate shows the error and the plans. In an interactive terminal it then asks Open checkout for 7-day-access ($12.99)? [Y/n] for the cheapest plan, and opens Stripe checkout when you answer yes. It does not ask with --json, in CI (CI is set), or when stdin is not a terminal.
If the connection breaks after the server accepted the prompt, the design can still be finished and saved, and it can use a generation. The CLI then does not tell you to try again. Run inkstudioai designs to check if the design is in your account first.
styles
List the style ids for --style.
inkstudioai styles
designs
List the designs saved to your account, newest first.
inkstudioai designs
inkstudioai designs --limit 50 --page 2
gallery
Search the public gallery. No login needed.
inkstudioai gallery
inkstudioai gallery "minimalist wave" --limit 5
whoami (alias: status)
Show your plan, the time left on it, free designs, premium credits, and API use today. When less than 2 days are left, whoami tells you how to extend the plan.
inkstudioai whoami
Account ana@example.com (Ana)
Plan Active, 8 days left (ends Nov 1, 10:00 UTC)
Free designs 0
Premium credits 28 (8 plan, 20 purchased) for the image tools on the website
Designs made 14
API today 3 of 50 generations
Next design Paid quality
API key isk_AbCdEfGh… (config file)
pricing
Show the plans and credit packs.
inkstudioai pricing
buy
Open Stripe checkout for a plan or credit pack. The purchase is added to the signed-in account.
inkstudioai buy 7-day-access
inkstudioai buy 7-day-access --no-browser # only print the checkout link
open
Open a page of the website.
inkstudioai open account
inkstudioai open pricing
inkstudioai open developers
logout
Remove the saved key from this computer. The key still works on the server until you revoke it on your account page.
inkstudioai logout
Use with AI agents (MCP)
inkstudioai mcp runs a Model Context Protocol server over stdio. It gives an agent these tools:
| Tool | What it does |
|---|---|
login |
Sign in from the chat: returns a link and code to approve in the browser |
generate_tattoo |
Create a design from a prompt, style, color, and background. Returns the image, so the client can show it in the chat |
list_styles |
List the style ids |
get_account |
Show the plan, free designs, credits, and usage |
search_gallery |
Search the public gallery |
get_pricing |
List plans and credit packs |
create_checkout |
Create a Stripe checkout link for the user to open. It charges nothing by itself |
There are three ways to sign in:
- No terminal needed: ask the agent to sign you in. It calls the
logintool and gives you a link and a code. Approve the code in the browser (or create an account there), then tell the agent. It callsloginagain, which saves the API key on your computer. - Run
npx inkstudioai loginin a terminal. The MCP server uses the same saved key. - Create a key on your account page and put it in
INKSTUDIO_API_KEYin the client config. This key takes precedence over the saved key.
The server reads the saved key on each tool call, so a login while the client runs needs no restart.
generate_tattoo returns the image URL as text. It also returns the image itself (when it is smaller than 1.5 MB) and, on protocol 2025-06-18, a resource_link to the image. If the download fails, the result has only the text. It sends notifications/progress messages when the client gives a progressToken. Links to website pages carry utm_source=mcp. The server supports MCP protocol versions 2025-06-18 and 2024-11-05.
Claude Code
claude mcp add inkstudioai --env INKSTUDIO_API_KEY=isk_... -- npx -y inkstudioai mcp
If you ran npx inkstudioai login, or want to sign in with the login tool, you can leave out the key:
claude mcp add inkstudioai -- npx -y inkstudioai mcp
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"inkstudioai": {
"command": "npx",
"args": ["-y", "inkstudioai", "mcp"],
"env": { "INKSTUDIO_API_KEY": "isk_..." }
}
}
}
Cursor (~/.cursor/mcp.json or .cursor/mcp.json in a project)
{
"mcpServers": {
"inkstudioai": {
"command": "npx",
"args": ["-y", "inkstudioai", "mcp"],
"env": { "INKSTUDIO_API_KEY": "isk_..." }
}
}
}
Windsurf and other MCP clients use the same command, arguments, and environment variable. In every client you can leave out env and sign in with the login tool instead.
Scripts and JSON output
Add --json to any command to get the raw API response on stdout. Errors are JSON too, with error, code, and hints, and the exit code is not 0. A wrong command or option has "code": "usage".
If the design is ready but the image file could not be saved, generate --json prints the full result with "file": null and a saveError message, and exits with 3. The design is in your account, so do not generate it again.
inkstudioai generate "a paper crane" --json | jq -r .imageUrl
Exit codes: 0 success, 1 error, 2 wrong command or options, 3 design created but the image file not saved.
Configuration
| Setting | Where |
|---|---|
| API key | --api-key, then INKSTUDIO_API_KEY, then the saved key |
| Saved key | $XDG_CONFIG_HOME/inkstudioai/config.json, default ~/.config/inkstudioai/config.json, on Windows %APPDATA%\inkstudioai\config.json. Only your user can read it |
| API URL | INKSTUDIO_API_URL, default https://inkstudioai.com/api/v1 |
| Do not open a browser | INKSTUDIO_NO_BROWSER=1 |
| No colors | NO_COLOR=1 or --no-color |
Pricing
Every new account gets one free design, and no card is needed for it. A plan gives unlimited text-to-tattoo designs (up to 50 a day through the API) and premium credits for the image tools on the website. Credit packs add premium credits to an active plan. See current prices with inkstudioai pricing or on the pricing page.
API
The CLI uses the public Ink Studio AI API. You can call it from any language.
- Developer docs: https://inkstudioai.com/developers
- OpenAPI spec: https://inkstudioai.com/api/v1/openapi.json
Privacy
Designs you create are saved privately to your account, in your design history on the website. The CLI sends your prompt and options to the Ink Studio AI API and stores only your API key on your computer.
Support
Questions or problems: help@inkstudioai.com, or open an issue at https://github.com/ciroartz/inkstudioai-cli/issues. Report security problems by email, not in an issue (see SECURITY.md).
License
MIT
Ink Studio AI MCP questions
How do I add Ink Studio AI MCP to Claude Code?
Run claude mcp add --env INKSTUDIO_API_KEY=<YOUR_INKSTUDIO_API_KEY> inkstudioai-cli -- npx -y inkstudioai in your terminal. Add --scope user to make it available in every project.
How do I add Ink Studio AI MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
Can I try the service for free?
Yes, new accounts receive one free design without needing a credit card.
What styles of tattoos can I generate?
You can create designs in 13 different styles, including fine line, Japanese, traditional, and realism.
How do I use this with an AI agent like Claude or Cursor?
You can run the MCP server using npx and provide an API key via an environment variable, or use the login tool within the chat to authenticate.