Koskamo

Easy-Peasy.AI MCP

An official Model Context Protocol server that exposes Easy-Peasy.AI's full suite of generative AI tools, including text generation, image creation, video production, and audio transcription, directly within AI chat clients like ChatGPT and Claude.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Easy-Peasy.AI MCP logo, by Easy-Peasy.AIVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Easy-Peasy.AI
You need:Have an account readyChatGPT and Claude just need you to sign in and approveCLI clients use the API key from your Settings page
MCP endpoint (Streamable HTTP)
https://easy-peasy.ai/mcp
Vendor documentation

What you can do with it

  • Generate text using 200+ writing templates
  • Create images with models like Seedream 5.0 Pro
  • Generate videos from text or images
  • Transcribe audio and video files

Source and maintenance

Vendor evidenceRegistry 1.3.2
Maintenance checked

Protocol and capabilities

Server
easy-peasy-ai 1.3.2
MCP protocol
2025-06-18
Tools
13 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {},
  "resources": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Use Easy-Peasy.AI tools only when the user asks to create, retrieve, or transform content with their account. Generation tools consume the user’s Easy-Peasy.AI credits or quotas. Prefer list/get tools to resolve template, voice, and generation details before starting a paid generation. After generating images or starting a video, use display_media with the returned IDs to show the results. The viewer can check an existing video’s progress. Keep a result link available for clients without embedded UI.

Tools

13 advertised

get_account — Check account connection
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check connection status only when the user explicitly asks whether Easy-Peasy.AI is connected. Returns only a boolean. Do not call for general knowledge, account deletion, or requests for credentials or personal details; those requests are unsupported by this tool.

get_account input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_account annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_templates — List writing templates
Advertised by the server during the last successful anonymous check.
Advertised read-only

List a page of Easy-Peasy.AI writing templates (presets), optionally filtered by category. Returns slug, title, description, and category, plus total, categories, and next_offset (null on the last page). Use get_template to inspect a known slug directly, then generate_text to run it.

list_templates input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "description": "Maximum results to return (default 20, maximum 50)."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "minimum": 0,
      "description": "Start position. Use next_offset from the previous result to read another page."
    },
    "category": {
      "type": "string",
      "description": "Optional category name to filter templates by."
    }
  },
  "additionalProperties": false
}
list_templates annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_template — Get writing template
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one text generation template by slug, including its input fields (name, label, type, options). Field names like "keywords" and "extra1".."extra14" map directly onto generate_text parameters.

get_template input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Template slug from list_templates."
    }
  },
  "additionalProperties": false
}
get_template annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_text — Generate text
Advertised by the server during the last successful anonymous check.

Generate text with an Easy-Peasy.AI template (preset). Synchronous — returns the generated text. Uses the account word quota and requires available API token allowance. Call get_template first to learn which fields a template accepts; pass template-specific fields via extra_fields (e.g. {"extra1": "..."}).

generate_text input schema
{
  "type": "object",
  "required": [
    "preset"
  ],
  "properties": {
    "tone": {
      "type": "string",
      "description": "Optional tone of voice, e.g. \"Friendly\"."
    },
    "preset": {
      "type": "string",
      "description": "Template slug, e.g. \"blog-post-intro\" (see list_templates)."
    },
    "outputs": {
      "type": "number",
      "description": "How many variations to generate (default 1)."
    },
    "keywords": {
      "type": "string",
      "description": "Main topic / input text for the template. Required by almost all templates."
    },
    "language": {
      "type": "string",
      "description": "Output language name in English, e.g. \"English\", \"Spanish\"."
    },
    "extra_fields": {
      "type": "object",
      "description": "Template-specific fields keyed by field name from get_template, e.g. {\"extra1\": \"value\"}.",
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
generate_text annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
generate_image — Generate or edit image
Advertised by the server during the last successful anonymous check.
Open-world

Generate or edit an image with Easy-Peasy.AI. Synchronous — returns image URL(s) when generation finishes (can take up to a few minutes). Uses image credits and requires a paid plan for API access. To edit existing images, pass their URLs in source_images; model then picks the edit model. display_media shows the returned image IDs in an embedded gallery.

generate_image input schema
{
  "type": "object",
  "required": [
    "prompt"
  ],
  "properties": {
    "model": {
      "type": "string",
      "description": "Image model name. For new images, e.g. \"Nano Banana 2\" (default), \"Nano Banana Pro\", \"FLUX.2 [max]\", \"OpenAI GPT Image 2.5 Flare Medium\", \"OpenAI GPT Image 2 Medium\", \"Seedream 5.0 Pro\". With source_images, model also picks the edit model, so it must be one of the edit models (a subset), e.g. \"Nano Banana 2\", \"Nano Banana Pro\", \"OpenAI GPT Image 2.5 Flare Medium\", \"OpenAI GPT Image 2.5 Sunburst Medium\", \"Seedream 5.0 Pro\", \"FLUX.2 [max]\" or \"Qwen Image\"; any other name is rejected with the list of edit models. Omit model when editing to use \"OpenAI GPT Image 2.5 Flare Medium\"."
    },
    "style": {
      "type": "string",
      "description": "Optional style preset name."
    },
    "prompt": {
      "type": "string",
      "description": "Description of the image to generate."
    },
    "outputs": {
      "type": "number",
      "description": "Number of images to generate (default 1)."
    },
    "dimensions": {
      "type": "string",
      "description": "Aspect ratio such as \"1:1\", \"16:9\" or \"9:16\" (supported ratios vary by model), or a pixel size \"WIDTHxHEIGHT\" such as \"1792x1024\" (default \"1024x1024\"). Nano Banana 2, Nano Banana Pro and GPT Image models map a pixel size to the nearest aspect ratio they support; other models may not, so prefer an aspect ratio."
    },
    "resolution": {
      "type": "string",
      "description": "For models that support it: \"1K\" or \"2K\"."
    },
    "source_images": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional image URLs to edit/transform (image-to-image). Up to 10."
    }
  },
  "additionalProperties": false
}
generate_image output schema
{
  "type": "object",
  "required": [
    "media"
  ],
  "properties": {
    "media": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "type",
          "url",
          "status"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          },
          "url": {
            "type": "string"
          },
          "type": {
            "enum": [
              "image",
              "video"
            ],
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "status": {
            "enum": [
              "processing",
              "completed",
              "failed"
            ],
            "type": "string"
          },
          "used_credits": {
            "type": "number",
            "minimum": 0
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
generate_image annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_image — Get generated image
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get a previously generated image by its numeric id (returned by generate_image).

get_image input schema
{
  "type": "object",
  "required": [
    "image_id"
  ],
  "properties": {
    "image_id": {
      "type": "number",
      "description": "Numeric image id."
    }
  },
  "additionalProperties": false
}
get_image output schema
{
  "type": "object",
  "required": [
    "media"
  ],
  "properties": {
    "media": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "type",
          "url",
          "status"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          },
          "url": {
            "type": "string"
          },
          "type": {
            "enum": [
              "image",
              "video"
            ],
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "status": {
            "enum": [
              "processing",
              "completed",
              "failed"
            ],
            "type": "string"
          },
          "used_credits": {
            "type": "number",
            "minimum": 0
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
get_image annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_video — Generate video
Advertised by the server during the last successful anonymous check.
Open-world

Start an AI video generation. Defaults to MiniMax H3 Max: 5 seconds, 768p, native audio, 4 credits per second at 768p. With an image and no model, uses MiniMax H3 Max Image. ASYNC — returns a video id. display_media shows the video and checks its progress in an embedded player; get_video also checks that same id. Uses video credits (billed per second of output).

generate_video input schema
{
  "type": "object",
  "required": [
    "prompt"
  ],
  "properties": {
    "image": {
      "type": "string",
      "description": "Optional image URL used as the first frame. With no model, selects MiniMax H3 Max Image. For an explicit model, select the matching Image variant."
    },
    "model": {
      "type": "string",
      "description": "Optional video model. Omit for \"MiniMax H3 Max\" (or \"MiniMax H3 Max Image\" when image is supplied). Other examples: \"Veo 3.1\", \"Veo 3.1 Fast\", \"Seedance 2.5\", \"Seedance 2.0 Mini\". An explicit model is used as supplied; choose its Image variant for image-to-video."
    },
    "prompt": {
      "type": "string",
      "description": "Description of the video to generate."
    },
    "duration": {
      "type": "string",
      "description": "Clip length in seconds as a string. MiniMax H3 Max supports \"5\" through \"15\" (default \"5\"). Veo 3.1 supports only \"4\", \"6\", or \"8\" seconds. Must be supported by the selected model. If omitted, uses a supported model default."
    },
    "resolution": {
      "type": "string",
      "description": "Model-dependent output resolution. MiniMax H3 Max supports \"768p\" (default) or \"480p\". Other models may support \"720p\", \"1080p\", or \"2k\"."
    },
    "aspect_ratio": {
      "type": "string",
      "description": "Aspect ratio, e.g. \"16:9\" (default), \"9:16\", \"1:1\"."
    },
    "generate_audio": {
      "type": "boolean",
      "description": "Whether to generate a soundtrack on models with an audio toggle. MiniMax H3 Max always generates audio and cannot accept false. For a silent video, select a model with an audio toggle, such as Veo 3.1 Fast."
    }
  },
  "additionalProperties": false
}
generate_video output schema
{
  "type": "object",
  "required": [
    "media"
  ],
  "properties": {
    "media": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "type",
          "url",
          "status"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          },
          "url": {
            "type": "string"
          },
          "type": {
            "enum": [
              "image",
              "video"
            ],
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "status": {
            "enum": [
              "processing",
              "completed",
              "failed"
            ],
            "type": "string"
          },
          "used_credits": {
            "type": "number",
            "minimum": 0
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
generate_video annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_video — Get generated video
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check a video generation started with generate_video. Returns { video: { id, url, status } } — status is "processing" until the video is ready, then "completed" with the download url.

get_video input schema
{
  "type": "object",
  "required": [
    "video_id"
  ],
  "properties": {
    "video_id": {
      "type": "number",
      "description": "Video id returned by generate_video."
    }
  },
  "additionalProperties": false
}
get_video output schema
{
  "type": "object",
  "required": [
    "media"
  ],
  "properties": {
    "media": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "type",
          "url",
          "status"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          },
          "url": {
            "type": "string"
          },
          "type": {
            "enum": [
              "image",
              "video"
            ],
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "status": {
            "enum": [
              "processing",
              "completed",
              "failed"
            ],
            "type": "string"
          },
          "used_credits": {
            "type": "number",
            "minimum": 0
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
get_video annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
display_media — Show generated images or videos
Advertised by the server during the last successful anonymous check.
Advertised read-only

Show Easy-Peasy.AI images in an embedded gallery or videos in an embedded player. Use IDs returned by generate_image, get_image, generate_video, or get_video. Can display a processing video and check its progress. Reads existing results in the connected account; does not generate content or spend credits. Clients without embedded UI still receive the media links.

display_media input schema
{
  "type": "object",
  "required": [
    "media_type",
    "ids"
  ],
  "properties": {
    "ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      },
      "maxItems": 8,
      "minItems": 1,
      "description": "Existing image or video IDs to display, in order (up to 8)."
    },
    "media_type": {
      "enum": [
        "image",
        "video"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
display_media output schema
{
  "type": "object",
  "required": [
    "media"
  ],
  "properties": {
    "media": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "type",
          "url",
          "status"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          },
          "url": {
            "type": "string"
          },
          "type": {
            "enum": [
              "image",
              "video"
            ],
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "status": {
            "enum": [
              "processing",
              "completed",
              "failed"
            ],
            "type": "string"
          },
          "used_credits": {
            "type": "number",
            "minimum": 0
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
display_media annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_voices — List text-to-speech voices
Advertised by the server during the last successful anonymous check.
Advertised read-only

List a page of text-to-speech voices (id, name, language, accent), including the account’s custom/cloned voices. Filter by language and optionally accent. Returns total and next_offset (null on the last page). Choose a suitable returned id and pass it as voice_id to generate_speech; additional pages are optional.

list_voices input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "description": "Maximum results to return (default 20, maximum 50)."
    },
    "accent": {
      "type": "string",
      "description": "Optional accent filter."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "minimum": 0,
      "description": "Start position. Use next_offset from the previous result to read another page."
    },
    "language": {
      "type": "string",
      "description": "Optional language filter, e.g. \"Dutch\"."
    }
  },
  "additionalProperties": false
}
list_voices annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_speech — Generate speech
Advertised by the server during the last successful anonymous check.

Convert text to speech (ElevenLabs-powered). Synchronous — returns the audio file URL. Billed against the account’s monthly text-to-speech character quota.

generate_speech input schema
{
  "type": "object",
  "required": [
    "text",
    "voice_id"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Text to speak."
    },
    "speed": {
      "type": "number",
      "description": "Playback speed 0.7-1.2 (default 1.0)."
    },
    "voice_id": {
      "type": "string",
      "description": "Voice id from list_voices."
    },
    "output_format": {
      "type": "string",
      "description": "Audio format, e.g. \"mp3_44100_128\" (default) or \"wav\"."
    }
  },
  "additionalProperties": false
}
generate_speech annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
transcribe_audio — Transcribe audio
Advertised by the server during the last successful anonymous check.
Open-world

Transcribe audio or video from a public link: a media file, or a page with a video or audio in it — YouTube, X (Twitter) posts and broadcasts, Instagram, TikTok, Google Drive, SoundCloud, Loom and most other video sites (up to 6 hours). ASYNC — returns a uuid once the job has started (checking a page link can take up to a minute); then poll get_transcription until the transcript is ready, which takes a few minutes for a long video. A link without a video or audio, or a private or live one, is usually refused at once with the reason; a download that fails later shows as status "failed" in get_transcription. Requires a paid plan.

transcribe_audio input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Public link to an audio/video file, or to a page with a video or audio on it (a YouTube video, an X post, an Instagram reel, a TikTok, a Google Drive file…)."
    },
    "name": {
      "type": "string",
      "description": "Optional name for the transcription."
    },
    "language": {
      "type": "string",
      "description": "Spoken language name in English, e.g. \"English\" (helps accuracy)."
    },
    "detect_speakers": {
      "type": "boolean",
      "description": "Label different speakers in the transcript (default true). When off, a YouTube video that has captions is transcribed from them at once."
    }
  },
  "additionalProperties": false
}
transcribe_audio annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_transcription — Get transcription
Advertised by the server during the last successful anonymous check.

Get a transcription started with transcribe_audio using its exact returned uuid and the same connected account. The content field is empty until transcription finishes. If the job is not found or fails, report the error; do not start a replacement transcription unless the user explicitly requests a new job.

get_transcription input schema
{
  "type": "object",
  "required": [
    "audio_id"
  ],
  "properties": {
    "audio_id": {
      "type": "string",
      "description": "Transcription uuid from transcribe_audio."
    }
  },
  "additionalProperties": false
}
get_transcription annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

easy-peasy-media-viewer — Easy-Peasy.AI media viewer

Advertised by the server during the last successful anonymous check.

An image gallery and video player for existing Easy-Peasy.AI generations.

easy-peasy-media-viewer URI
ui://easy-peasy/media-viewer-v3.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
747 ms
95th percentile latency
747 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 747 ms · metadata changed · 13 tool(s), 1 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http easy-peasy-ai-mcp https://easy-peasy.ai/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add easy-peasy-ai-mcp --url https://easy-peasy.ai/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable easy-peasy-ai-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "easy-peasy-ai-mcp": {
      "url": "https://easy-peasy.ai/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "easy-peasy-ai-mcp": {
      "type": "streamableHttp",
      "url": "https://easy-peasy.ai/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start easy-peasy-ai-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "easy-peasy-ai-mcp": {
      "type": "http",
      "url": "https://easy-peasy.ai/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http easy-peasy-ai-mcp https://easy-peasy.ai/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "easy-peasy-ai-mcp": {
      "url": "https://easy-peasy.ai/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "easy-peasy-ai-mcp": {
      "serverUrl": "https://easy-peasy.ai/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Easy-Peasy.AI MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Easy-Peasy.AI MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing