ImgKits MCP
ImgKits MCP provides tools for converting PDFs and images to Markdown, performing OCR with bounding boxes, and extracting tables. It also supports translation and watermarking via upstream integrations, using a credit-based billing system.
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.
https://mcp.imgkits.com/mcpWhat you can do with it
- Convert PDFs and images to clean Markdown for RAG and LLM ingestion
- Extract text blocks with bounding boxes and page numbers from images
- Extract tables as HTML and row/column matrices from PDFs or images
- Translate text, documents, images, and subtitles via TransMonkey
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- mcp-doc-markdown-mcp 0.1.0
- MCP protocol
- 2025-06-18
- Tools
- 12 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
12 advertised
convert_to_markdown — Convert PDF or image to Markdown
Convert PDF and image files to clean Markdown for RAG, LLM ingestion, and knowledge bases. Optionally include MinerU layout JSON (content list with blocks and bounding boxes). Input: 1-5 public https file URLs, each ≤20 MiB. Supported: pdf, png, jpeg, webp, bmp, tiff. DOCX is not supported in this release. Private, local, and metadata hosts are rejected. Processing is asynchronous upstream; this call polls until done or times out after about 75 seconds. This Worker does not store uploaded files or results. Upstream MinerU task data is temporary (≤24h). Billing: charged before the MinerU job is created (default 1 credit per tool call). No automatic refunds. Powered by MinerU (opendatalab/MinerU). License: https://github.com/opendatalab/MinerU/blob/master/LICENSE.md
{
"type": "object",
"required": [
"files"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "string",
"format": "uri",
"description": "Public https URL pointing directly to a supported PDF or image file."
},
"maxItems": 5,
"minItems": 1,
"description": "1-5 public https file URLs."
},
"include_layout_json": {
"type": "boolean",
"default": false,
"description": "When true, also return MinerU layout JSON (content_list) for each file."
}
},
"additionalProperties": false
}{
"title": "Convert PDF or image to Markdown",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}ocr_image — Image OCR with bounding boxes
Extract text from images, screenshots, and scanned PDF pages. Returns text blocks with block-level bounding boxes [x0, y0, x1, y1] and page indexes. Coordinates are MinerU content-list coordinates, not character-level boxes and not rescaled to pixels. Input: 1-5 public https file URLs, each ≤20 MiB. Supported: pdf, png, jpeg, webp, bmp, tiff. DOCX is not supported in this release. Private, local, and metadata hosts are rejected. Tables inside an image are returned as positioned table_cell blocks. Processing is asynchronous and this call polls until done or times out after about 75 seconds. This Worker does not store uploaded files or results. Upstream MinerU task data is temporary (≤24h). Billing: charged before the MinerU job is created (default 1 credit per tool call). No automatic refunds. Powered by MinerU (opendatalab/MinerU). License: https://github.com/opendatalab/MinerU/blob/master/LICENSE.md
{
"type": "object",
"required": [
"files"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "string",
"format": "uri",
"description": "Public https URL pointing directly to a supported PDF or image file."
},
"maxItems": 5,
"minItems": 1,
"description": "1-5 public https file URLs."
}
},
"additionalProperties": false
}{
"title": "Image OCR with bounding boxes",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}extract_tables — Extract tables from PDF or image
Extract tables from PDFs and images as HTML plus a row/column matrix. Merged cells are expanded; only the top-left cell carries content and other covered cells are empty strings. Returns row_count, column_count, page_idx, and bbox for each table. Input: 1-5 public https file URLs, each ≤20 MiB. Supported: pdf, png, jpeg, webp, bmp, tiff. DOCX is not supported in this release. Private, local, and metadata hosts are rejected. Table structure is model-recognized, so complex, borderless, or handwritten tables may contain errors. Processing is asynchronous and this call polls until done or times out after about 75 seconds. This Worker does not store uploaded files or results. Upstream MinerU task data is temporary (≤24h). Billing: charged before the MinerU job is created (default 1 credit per tool call). No automatic refunds. Powered by MinerU (opendatalab/MinerU). License: https://github.com/opendatalab/MinerU/blob/master/LICENSE.md
{
"type": "object",
"required": [
"files"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "string",
"format": "uri",
"description": "Public https URL pointing directly to a supported PDF or image file."
},
"maxItems": 5,
"minItems": 1,
"description": "1-5 public https file URLs."
}
},
"additionalProperties": false
}{
"title": "Extract tables from PDF or image",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}translate_text — Translate text
Translate up to 50,000 characters of plain text (up to 50 strings). Long inputs are split into <=1,900-character chunks automatically. Synchronous. Cost: 1 credit per call; mcp-credit-gateway charges before forwarding the request. Requires Authorization: Bearer sk_live_... on the MCP endpoint.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"to"
],
"properties": {
"to": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "Target language code or English name, e.g. en, zh, cht, ja, ko, fr, de, es."
},
"from": {
"type": "string",
"default": "auto",
"maxLength": 32,
"minLength": 1,
"description": "Source language code or English name. Defaults to 'auto'."
},
"text": {
"type": "string",
"maxLength": 50000,
"minLength": 1,
"description": "A single string to translate. Provide this or `texts`, not both."
},
"texts": {
"type": "array",
"items": {
"type": "string",
"maxLength": 50000,
"minLength": 1
},
"maxItems": 50,
"minItems": 1,
"description": "Up to 50 strings to translate in one call. Total length must be <= 50,000 characters."
},
"idempotency_key": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Optional per-job key for upstream job isolation. Billing is handled by mcp-credit-gateway."
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}translate_document — Translate document
Translate a document from a public URL. Supported formats include PDF, DOCX/DOC, XLSX/XLS, PPTX/PPT, EPUB, TXT, HTML, MD and CSV. Upstream size limits: PDF <= 30 MB, other formats <= 80 MB. This is an async job: the call waits up to wait_seconds (default 30, max 120) and returns a job_id if still running. Call again with the same job_id to poll; polling does not start a new translation job. Upstream deletes temporary/original files after processing and result URLs expire (about 24 hours), so download promptly. Cost: 5 credits per new job, charged by mcp-credit-gateway before forwarding the request.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"to": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "Target language code or name, e.g. en, zh, cht, ja, ko, fr, de, es."
},
"from": {
"type": "string",
"default": "auto",
"maxLength": 32,
"minLength": 1,
"description": "Source language code or name. Defaults to 'auto'."
},
"job_id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Resume polling an existing job. Polling does not create a new upstream job."
},
"doc_url": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "Publicly reachable document URL (signed URLs are fine). Supported: PDF, DOCX/DOC, XLSX/XLS, PPTX/PPT, EPUB, TXT, HTML, MD, CSV, SRT and more. Upstream size limits: PDF <= 30 MB, other formats <= 80 MB."
},
"file_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Optional original file name, used by the upstream for the output file name."
},
"wait_seconds": {
"type": "integer",
"default": 30,
"maximum": 120,
"minimum": 0,
"description": "How long to wait for the async job in this call (0-120 seconds, default 30)."
},
"idempotency_key": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Optional per-job key for upstream job isolation. Billing is handled by mcp-credit-gateway."
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}translate_image — Translate image text
Translate text inside 1-10 images supplied as public URLs (JPG/PNG/WebP recommended; keep each image <= 10 MB). This is an async job: the call waits up to wait_seconds (default 30, max 120) and returns a job_id if still running. Call again with the same job_id to poll; polling does not start a new translation job. Upstream result URLs expire (about 24 hours), so download promptly. Cost: 2 credits per new job, charged by mcp-credit-gateway before forwarding the request.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"to": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "Target language code or name. Required for a new job."
},
"font": {
"enum": [
"noto",
"wildwords",
"komikajam",
"bangers",
"edo",
"ridibatang",
"bushidoo",
"hayah",
"itim",
"mogulirina"
],
"type": "string",
"default": "noto",
"description": "Overlay font. Defaults to 'noto'."
},
"from": {
"type": "string",
"default": "auto",
"maxLength": 32,
"minLength": 1,
"description": "Source language code or name. Defaults to 'auto'."
},
"paste": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
}
],
"default": 1,
"description": "Paste mode: 0 = no text overlay, 1 = whole-image overlay (default), 2 = block overlay."
},
"job_id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Resume polling an existing job. Polling does not create a new upstream job."
},
"image_urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"maxItems": 10,
"minItems": 1,
"description": "1-10 public image URLs (JPG/PNG/WebP recommended). Keep each image <= 10 MB; larger files may be rejected by the upstream downloader."
},
"wait_seconds": {
"type": "integer",
"default": 30,
"maximum": 120,
"minimum": 0,
"description": "How long to wait for the async job in this call (0-120 seconds, default 30)."
},
"idempotency_key": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Optional per-job key for upstream job isolation. Billing is handled by mcp-credit-gateway."
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}translate_subtitle — Translate subtitle
Translate SRT, WebVTT or ASS/SSA subtitle content (up to 1,000,000 characters). Timestamps, cue order, SRT/VTT indices and ASS event fields are preserved exactly; only cue text is translated. Synchronous. Cost: 3 credits per call, charged by mcp-credit-gateway before forwarding the request.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"subtitle_content",
"to"
],
"properties": {
"to": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "Target language code or name, e.g. en, zh, cht, ja, ko, fr, de, es."
},
"from": {
"type": "string",
"default": "auto",
"maxLength": 32,
"minLength": 1,
"description": "Source language code or name. Defaults to 'auto'."
},
"format": {
"enum": [
"auto",
"srt",
"vtt",
"ass"
],
"type": "string",
"default": "auto",
"description": "Subtitle format. Defaults to auto-detection."
},
"idempotency_key": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Optional per-job key for upstream job isolation. Billing is handled by mcp-credit-gateway."
},
"subtitle_content": {
"type": "string",
"maxLength": 1000000,
"minLength": 1,
"description": "Raw subtitle text (SRT, WebVTT or ASS/SSA). Up to 1,000,000 characters. Timestamps are preserved exactly."
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}detect_language — Detect language
Detect the language of up to 20,000 characters. Uses a local Unicode-script + stopword/diacritic heuristic; no upstream call. Returns a language code, confidence, reliability flag and alternatives. Billing: free by default (COST_DETECT_LANGUAGE=0).
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 20000,
"minLength": 1,
"description": "Text to identify. Up to 20,000 characters; longer samples improve accuracy."
},
"idempotency_key": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Optional per-job key; relevant when COST_DETECT_LANGUAGE is above 0 (gateway billing)."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}add_watermark — Add watermark
Add a visible text or image watermark to an image or PDF supplied as a public URL. Formats: JPG/PNG/WebP images up to 10 MB; PDF up to 30 MB. watermark_type=text requires `text` (<= 500 chars); watermark_type=image requires `watermark_image_url` (PNG/JPG/WebP, <= 5 MB, transparency supported). Position: top-left/top-center/top-right/center/bottom-left/bottom-center/bottom-right/tile. opacity 0.05-1, optional scale/font_size/color/rotation. For PDF, pass `pages` (e.g. "1-3,5") to limit pages. Synchronous. Cost: 2 credits per call; mcp-credit-gateway charges before forwarding the request. Requires Authorization: Bearer sk_live_... on the MCP endpoint.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"source_url",
"watermark_type"
],
"properties": {
"text": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "Watermark text, required when watermark_type=text (<= 500 chars)."
},
"color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Text colour as #RRGGBB. Defaults to upstream choice (usually white)."
},
"pages": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "PDF only. 1-based page selection such as \"1\", \"1-3\" or \"1-3,5,8-10\"."
},
"scale": {
"type": "number",
"maximum": 0.95,
"minimum": 0.02,
"description": "Image watermark width as a fraction of the source width, 0.02–0.95."
},
"opacity": {
"type": "number",
"default": 0.35,
"maximum": 1,
"minimum": 0.05,
"description": "Watermark opacity, 0.05–1 (default 0.35)."
},
"position": {
"enum": [
"top-left",
"top-center",
"top-right",
"center",
"bottom-left",
"bottom-center",
"bottom-right",
"tile"
],
"type": "string",
"default": "bottom-right",
"description": "Anchor for the watermark, or `tile` to repeat it across the page/image."
},
"rotation": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Clockwise rotation in degrees, -180 to 180 (e.g. 45 for a diagonal stamp)."
},
"font_size": {
"type": "integer",
"maximum": 256,
"minimum": 8,
"description": "Text watermark font size in pixels (images) or points (PDF), 8–256."
},
"source_url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Public http(s) URL of the source image (JPG/PNG/WebP, <= 10 MB) or PDF (<= 30 MB)."
},
"source_type": {
"enum": [
"image",
"pdf"
],
"type": "string",
"description": "Optional. Defaults to PDF when source_url ends in .pdf, otherwise image."
},
"watermark_type": {
"enum": [
"text",
"image"
],
"type": "string",
"description": "`text` stamps words; `image` overlays a logo/PNG watermark."
},
"idempotency_key": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Optional caller correlation key, echoed in the result. Billing is handled by mcp-credit-gateway."
},
"watermark_image_url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Public PNG/JPG/WebP watermark image URL, required when watermark_type=image (<= 5 MB; transparency supported)."
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}remove_watermark — Remove watermark (authorized material only)
AI watermark removal / inpainting for ONE image (JPG/PNG/WebP, <= 10 MB) supplied as a public URL. Optional `mask_image_url` (white = remove) or normalized `mask_rect` {x,y,width,height} in 0-1; with neither, the upstream auto-detect mode is used (support depends on the upstream). COPYRIGHT / ABUSE GATE: Use only on images you own or are explicitly licensed/authorized to edit. Do not remove copyright, ownership, attribution or license watermarks from third-party material, and do not bulk-strip watermarks from other people's content. Calls are rate-limited/metered by mcp-credit-gateway, require a valid sk_live_ key, and every attempt (including failures) is logged with an audit id for review. (仅处理自有或已获授权素材;禁止批量剥离他人版权水印;调用限频;失败可审计。) This tool is metered per call, accepts a single image per request, and returns an audit_id; bulk/automated third-party stripping is prohibited and may be blocked or reported. Cost: 3 credits per call; mcp-credit-gateway charges before forwarding the request.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"source_url"
],
"properties": {
"bucket": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$",
"maxLength": 64,
"minLength": 1,
"description": "Upstream storage bucket for the result (default imgkits)."
},
"mask_rect": {
"type": "object",
"required": [
"x",
"y",
"width",
"height"
],
"properties": {
"x": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Left edge as a fraction of image width, 0–1."
},
"y": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Top edge as a fraction of image height, 0–1."
},
"width": {
"type": "number",
"maximum": 1,
"description": "Mask width as a fraction of image width, >0–1.",
"exclusiveMinimum": 0
},
"height": {
"type": "number",
"maximum": 1,
"description": "Mask height as a fraction of image height, >0–1.",
"exclusiveMinimum": 0
}
},
"description": "Optional rectangular mask in normalized coordinates (0–1). For /api/inpaint this is forwarded as `mask_rect`; if the upstream requires a bitmap mask, pass mask_image_url instead. Mutually exclusive with mask_image_url."
},
"source_url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Public http(s) URL of the image to clean (JPG/PNG/WebP, <= 10 MB). Only use material you own or are explicitly authorized to edit."
},
"mask_image_url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Optional public URL of a mask image (white/opaque = watermark area to remove, black or transparent = keep). Mutually exclusive with mask_rect."
},
"idempotency_key": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Optional caller correlation key, echoed in the result. Billing is handled by mcp-credit-gateway."
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}embed_blind_watermark — Embed blind watermark
Embed an invisible/blind watermark into an image supplied as a public URL (JPG/PNG/WebP/BMP, <= 10 MB; at least 64x64 px recommended). Uses the AiController EncodeBlindWatermark / Alibaba Cloud IMM path. Pass `watermark_text` (<= 512 chars, e.g. an order id), or omit it to use the server-held BLIND_WATERMARK_KEY secret; the embedded content is never echoed back. `model` is DWT (default, more robust) or DCT; optional `strength` 1-10. Synchronous. Cost: 2 credits per call, charged by mcp-credit-gateway before forwarding.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"source_url"
],
"properties": {
"model": {
"enum": [
"DWT",
"DCT"
],
"type": "string",
"default": "DWT",
"description": "Blind-watermark algorithm. DWT is more robust to scaling; DCT is faster."
},
"strength": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Optional embedding strength, 1–10. Higher survives more editing but is slightly more visible."
},
"source_url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Public http(s) URL of the source image (JPG/PNG/WebP/BMP, <= 10 MB). Recommended at least 64x64 px so the blind watermark survives compression."
},
"watermark_text": {
"type": "string",
"maxLength": 512,
"minLength": 1,
"description": "Content to embed invisibly (<= 512 chars), e.g. an order id or user id. Omit to use the server-held BLIND_WATERMARK_KEY. The content is never echoed back in the result."
},
"idempotency_key": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Optional caller correlation key, echoed in the result. Billing is handled by mcp-credit-gateway."
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}decode_blind_watermark — Decode blind watermark
Read a blind watermark from an image (public http(s) URL). Uses the AiController CreateDecodeBlindWatermarkTask + GetDecodeBlindWatermarkResult async path. Start with `source_url`; the call waits up to `wait_seconds` (default 15, max 60) and returns a `job_id` if still running. Poll by calling again with only `job_id`; polling never creates a new upstream decode task. Returns `content` when readable. Cost: 2 credits per call, charged by mcp-credit-gateway before forwarding.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"job_id": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Existing upstream task id returned by a previous call. Polling never creates a new decode task."
},
"source_url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Public http(s) URL of the watermarked image. Start a new decode job with this, or poll with `job_id`."
},
"wait_seconds": {
"type": "number",
"default": 15,
"maximum": 60,
"minimum": 0,
"description": "How long to wait for a result, 0–60 seconds (default 15). On timeout the call returns a job_id to poll."
},
"idempotency_key": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Optional caller correlation key, echoed in the result. Billing is handled by mcp-credit-gateway."
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
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
- 596 ms
- 95th percentile latency
- 596 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 596 ms · metadata changed · 12 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http imgkits-mcp https://mcp.imgkits.com/mcpCodex
codex mcp add imgkits-mcp --url https://mcp.imgkits.com/mcpCursor
{
"mcpServers": {
"imgkits-mcp": {
"url": "https://mcp.imgkits.com/mcp"
}
}
}Cline
{
"mcpServers": {
"imgkits-mcp": {
"type": "streamableHttp",
"url": "https://mcp.imgkits.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"imgkits-mcp": {
"type": "http",
"url": "https://mcp.imgkits.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http imgkits-mcp https://mcp.imgkits.com/mcpClaude Desktop
{
"mcpServers": {
"imgkits-mcp": {
"url": "https://mcp.imgkits.com/mcp"
}
}
}Windsurf
{
"mcpServers": {
"imgkits-mcp": {
"serverUrl": "https://mcp.imgkits.com/mcp"
}
}
}Let your agent find its tools
Find servers like ImgKits MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.