Frenchie

OCR, transcription, file extraction, and image generation for AI agents via MCP.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
96%
Naming quality
91%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,018Tokens (tool definitions)
~6.1 KBTypical response size
Significant attention impact (3.14% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "frenchie-skill": {
      "url": "https://mcp.getfrenchie.dev"
    }
  }
}

Remote endpoints

https://mcp.getfrenchie.devstreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪ocr_to_markdown(file_path, uploaded_file_reference, api_key)

Convert PDF/image files into Markdown through Frenchie

Input Schema

{
  "type": "object",
  "properties": {
    "file_path": {
      "type": "string",
      "minLength": 1,
      "description": "Absolute local file path. Stdio transport only — over HTTP, upload via upload_file first and pass uploaded_file_reference instead."
    },
    "uploaded_file_reference": {
      "type": "string",
      "minLength": 1,
      "description": "Object key returned by upload_file. Required for HTTP transport; ignored when file_path is provided in stdio."
    },
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Optional Frenchie API key (fr_...). Falls back to the FRENCHIE_API_KEY env var when omitted."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "done",
        "processing"
      ]
    },
    "jobId": {
      "type": "string",
      "minLength": 1
    },
    "creditsUsed": {
      "type": "number",
      "minimum": 0
    },
    "resultExpiresAt": {
      "type": "string",
      "format": "date-time"
    },
    "estimatedCompletion": {
      "type": "string",
      "format": "date-time"
    },
    "result": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "markdown"
            },
            "markdown": {
              "type": "string",
              "description": "HTTP mode: inline markdown. Stdio mode: omitted (read savedTo instead)"
            },
            "savedTo": {
              "type": "string",
              "description": "Stdio mode: relative path from output root to the saved result.md"
            },
            "pages": {
              "type": "integer",
              "minimum": 0,
              "description": "Number of pages processed — OCR only"
            },
            "wordCount": {
              "type": "integer",
              "minimum": 0,
              "description": "Approximate word count of the markdown"
            },
            "imageCount": {
              "type": "integer",
              "minimum": 0,
              "description": "Number of embedded images saved alongside result.md"
            }
          },
          "required": [
            "kind"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "image"
            },
            "format": {
              "type": "string",
              "enum": [
                "png",
                "jpeg",
                "webp"
              ]
            },
            "mimeType": {
              "type": "string"
            },
            "size": {
              "type": "string",
              "enum": [
                "1024x1024",
                "1536x1024",
                "1024x1536",
                "auto"
              ]
            },
            "background": {
              "type": "string",
              "enum": [
                "transparent",
                "opaque",
                "auto"
              ]
            },
            "style": {
              "type": "string"
            },
            "imageUrl": {
              "type": "string",
              "format": "uri",
              "description": "HTTP mode: presigned HTTPS link (~30 min expiry)"
            },
            "savedTo": {
              "type": "string",
              "description": "Stdio mode: relative path to the persisted image file"
            }
          },
          "required": [
            "kind",
            "format",
            "mimeType"
          ],
          "additionalProperties": false
        }
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡transcribe_to_markdown(file_path, uploaded_file_reference, api_key, language)

Convert audio/video files into Markdown transcripts through Frenchie. Set language (ISO 639-1 code, e.g. 'th', 'en', 'ja') for better accuracy; omit for auto-detection.

Input Schema

{
  "type": "object",
  "properties": {
    "file_path": {
      "type": "string",
      "minLength": 1,
      "description": "Absolute local file path. Stdio transport only — over HTTP, upload via upload_file first and pass uploaded_file_reference instead."
    },
    "uploaded_file_reference": {
      "type": "string",
      "minLength": 1,
      "description": "Object key returned by upload_file. Required for HTTP transport; ignored when file_path is provided in stdio."
    },
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Optional Frenchie API key (fr_...). Falls back to the FRENCHIE_API_KEY env var when omitted."
    },
    "language": {
      "type": "string",
      "minLength": 2,
      "maxLength": 10,
      "description": "Optional ISO 639-1 language code (e.g. 'th', 'en', 'ja') for better accuracy; omit for auto-detection."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "done",
        "processing"
      ]
    },
    "jobId": {
      "type": "string",
      "minLength": 1
    },
    "creditsUsed": {
      "type": "number",
      "minimum": 0
    },
    "resultExpiresAt": {
      "type": "string",
      "format": "date-time"
    },
    "estimatedCompletion": {
      "type": "string",
      "format": "date-time"
    },
    "result": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "markdown"
            },
            "markdown": {
              "type": "string",
              "description": "HTTP mode: inline markdown. Stdio mode: omitted (read savedTo instead)"
            },
            "savedTo": {
              "type": "string",
              "description": "Stdio mode: relative path from output root to the saved result.md"
            },
            "pages": {
              "type": "integer",
              "minimum": 0,
              "description": "Number of pages processed — OCR only"
            },
            "wordCount": {
              "type": "integer",
              "minimum": 0,
              "description": "Approximate word count of the markdown"
            },
            "imageCount": {
              "type": "integer",
              "minimum": 0,
              "description": "Number of embedded images saved alongside result.md"
            }
          },
          "required": [
            "kind"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "image"
            },
            "format": {
              "type": "string",
              "enum": [
                "png",
                "jpeg",
                "webp"
              ]
            },
            "mimeType": {
              "type": "string"
            },
            "size": {
              "type": "string",
              "enum": [
                "1024x1024",
                "1536x1024",
                "1024x1536",
                "auto"
              ]
            },
            "background": {
              "type": "string",
              "enum": [
                "transparent",
                "opaque",
                "auto"
              ]
            },
            "style": {
              "type": "string"
            },
            "imageUrl": {
              "type": "string",
              "format": "uri",
              "description": "HTTP mode: presigned HTTPS link (~30 min expiry)"
            },
            "savedTo": {
              "type": "string",
              "description": "Stdio mode: relative path to the persisted image file"
            }
          },
          "required": [
            "kind",
            "format",
            "mimeType"
          ],
          "additionalProperties": false
        }
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢generate_image(prompt, style, size, quality, format, ...)

Generate a single image from a text prompt through Frenchie. Required: prompt. Optional: style (free-text style direction), size, quality, format, background. stdio mode auto-saves the image to .frenchie/<slug>/generated.<ext>; HTTP mode returns a presigned imageUrl that the agent should download for the user.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "minLength": 1,
      "maxLength": 3500,
      "description": "Required. Plain-language description of the image to generate (e.g. 'poster of a ramen shop at night')."
    },
    "style": {
      "type": "string",
      "maxLength": 500,
      "description": "Optional style direction (e.g. 'flat vector, neon palette'). Merged into the generation prompt by Frenchie."
    },
    "size": {
      "type": "string",
      "enum": [
        "1024x1024",
        "1536x1024",
        "1024x1536",
        "auto"
      ],
      "description": "Optional output size. Defaults to automatic selection."
    },
    "quality": {
      "type": "string",
      "enum": [
        "low",
        "medium",
        "high",
        "auto"
      ],
      "description": "Optional output quality."
    },
    "format": {
      "type": "string",
      "enum": [
        "png",
        "jpeg",
        "webp"
      ],
      "description": "Optional output format. Defaults to png."
    },
    "background": {
      "type": "string",
      "enum": [
        "transparent",
        "opaque",
        "auto"
      ],
      "description": "Optional background. transparent is rejected when format is jpeg."
    },
    "output_dir": {
      "type": "string",
      "minLength": 1,
      "description": "Stdio mode only: absolute directory under which .frenchie/<slug>/generated.<ext> is saved. Defaults to the MCP server's process cwd. Recommended: pass your workspace root so the image lands next to your work instead of $HOME."
    },
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Optional Frenchie API key (fr_...). Falls back to the FRENCHIE_API_KEY env var when omitted."
    }
  },
  "required": [
    "prompt"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "done",
        "processing"
      ]
    },
    "jobId": {
      "type": "string",
      "minLength": 1
    },
    "creditsUsed": {
      "type": "number",
      "minimum": 0
    },
    "resultExpiresAt": {
      "type": "string",
      "format": "date-time"
    },
    "estimatedCompletion": {
      "type": "string",
      "format": "date-time"
    },
    "result": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "markdown"
            },
            "markdown": {
              "type": "string",
              "description": "HTTP mode: inline markdown. Stdio mode: omitted (read savedTo instead)"
            },
            "savedTo": {
              "type": "string",
              "description": "Stdio mode: relative path from output root to the saved result.md"
            },
            "pages": {
              "type": "integer",
              "minimum": 0,
              "description": "Number of pages processed — OCR only"
            },
            "wordCount": {
              "type": "integer",
              "minimum": 0,
              "description": "Approximate word count of the markdown"
            },
            "imageCount": {
              "type": "integer",
              "minimum": 0,
              "description": "Number of embedded images saved alongside result.md"
            }
          },
          "required": [
            "kind"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "image"
            },
            "format": {
              "type": "string",
              "enum": [
                "png",
                "jpeg",
                "webp"
              ]
            },
            "mimeType": {
              "type": "string"
            },
            "size": {
              "type": "string",
              "enum": [
                "1024x1024",
                "1536x1024",
                "1024x1536",
                "auto"
              ]
            },
            "background": {
              "type": "string",
              "enum": [
                "transparent",
                "opaque",
                "auto"
              ]
            },
            "style": {
              "type": "string"
            },
            "imageUrl": {
              "type": "string",
              "format": "uri",
              "description": "HTTP mode: presigned HTTPS link (~30 min expiry)"
            },
            "savedTo": {
              "type": "string",
              "description": "Stdio mode: relative path to the persisted image file"
            }
          },
          "required": [
            "kind",
            "format",
            "mimeType"
          ],
          "additionalProperties": false
        }
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢extract_to_markdown(file_path, uploaded_file_reference, api_key)

Extract structured documents (.docx, .xlsx, .csv, .tsv, .pptx) into Markdown through Frenchie. stdio mode auto-saves the result to .frenchie/<name>/result.md; HTTP mode returns inline Markdown.

Input Schema

{
  "type": "object",
  "properties": {
    "file_path": {
      "type": "string",
      "minLength": 1,
      "description": "Absolute local file path. Stdio transport only — over HTTP, upload via upload_file first and pass uploaded_file_reference instead."
    },
    "uploaded_file_reference": {
      "type": "string",
      "minLength": 1,
      "description": "Object key returned by upload_file. Required for HTTP transport; ignored when file_path is provided in stdio."
    },
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Optional Frenchie API key (fr_...). Falls back to the FRENCHIE_API_KEY env var when omitted."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "done",
        "processing"
      ]
    },
    "jobId": {
      "type": "string",
      "minLength": 1
    },
    "creditsUsed": {
      "type": "number",
      "minimum": 0
    },
    "resultExpiresAt": {
      "type": "string",
      "format": "date-time"
    },
    "estimatedCompletion": {
      "type": "string",
      "format": "date-time"
    },
    "result": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "markdown"
            },
            "markdown": {
              "type": "string",
              "description": "HTTP mode: inline markdown. Stdio mode: omitted (read savedTo instead)"
            },
            "savedTo": {
              "type": "string",
              "description": "Stdio mode: relative path from output root to the saved result.md"
            },
            "pages": {
              "type": "integer",
              "minimum": 0,
              "description": "Number of pages processed — OCR only"
            },
            "wordCount": {
              "type": "integer",
              "minimum": 0,
              "description": "Approximate word count of the markdown"
            },
            "imageCount": {
              "type": "integer",
              "minimum": 0,
              "description": "Number of embedded images saved alongside result.md"
            }
          },
          "required": [
            "kind"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "image"
            },
            "format": {
              "type": "string",
              "enum": [
                "png",
                "jpeg",
                "webp"
              ]
            },
            "mimeType": {
              "type": "string"
            },
            "size": {
              "type": "string",
              "enum": [
                "1024x1024",
                "1536x1024",
                "1024x1536",
                "auto"
              ]
            },
            "background": {
              "type": "string",
              "enum": [
                "transparent",
                "opaque",
                "auto"
              ]
            },
            "style": {
              "type": "string"
            },
            "imageUrl": {
              "type": "string",
              "format": "uri",
              "description": "HTTP mode: presigned HTTPS link (~30 min expiry)"
            },
            "savedTo": {
              "type": "string",
              "description": "Stdio mode: relative path to the persisted image file"
            }
          },
          "required": [
            "kind",
            "format",
            "mimeType"
          ],
          "additionalProperties": false
        }
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_job_result(job_id, api_key)

Fetch the latest async Frenchie job result

Input Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string",
      "minLength": 1,
      "description": "Job ID returned by ocr_to_markdown, transcribe_to_markdown, or generate_image when status was 'processing'."
    },
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Optional Frenchie API key (fr_...). Falls back to the FRENCHIE_API_KEY env var when omitted."
    }
  },
  "required": [
    "job_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "done",
        "processing"
      ]
    },
    "jobId": {
      "type": "string",
      "minLength": 1
    },
    "creditsUsed": {
      "type": "number",
      "minimum": 0
    },
    "resultExpiresAt": {
      "type": "string",
      "format": "date-time"
    },
    "estimatedCompletion": {
      "type": "string",
      "format": "date-time"
    },
    "result": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "markdown"
            },
            "markdown": {
              "type": "string",
              "description": "HTTP mode: inline markdown. Stdio mode: omitted (read savedTo instead)"
            },
            "savedTo": {
              "type": "string",
              "description": "Stdio mode: relative path from output root to the saved result.md"
            },
            "pages": {
              "type": "integer",
              "minimum": 0,
              "description": "Number of pages processed — OCR only"
            },
            "wordCount": {
              "type": "integer",
              "minimum": 0,
              "description": "Approximate word count of the markdown"
            },
            "imageCount": {
              "type": "integer",
              "minimum": 0,
              "description": "Number of embedded images saved alongside result.md"
            }
          },
          "required": [
            "kind"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "image"
            },
            "format": {
              "type": "string",
              "enum": [
                "png",
                "jpeg",
                "webp"
              ]
            },
            "mimeType": {
              "type": "string"
            },
            "size": {
              "type": "string",
              "enum": [
                "1024x1024",
                "1536x1024",
                "1024x1536",
                "auto"
              ]
            },
            "background": {
              "type": "string",
              "enum": [
                "transparent",
                "opaque",
                "auto"
              ]
            },
            "style": {
              "type": "string"
            },
            "imageUrl": {
              "type": "string",
              "format": "uri",
              "description": "HTTP mode: presigned HTTPS link (~30 min expiry)"
            },
            "savedTo": {
              "type": "string",
              "description": "Stdio mode: relative path to the persisted image file"
            }
          },
          "required": [
            "kind",
            "format",
            "mimeType"
          ],
          "additionalProperties": false
        }
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡upload_file(filename, file_size, mime_type, api_key)

Get a presigned upload URL for use with ocr_to_markdown, transcribe_to_markdown, or extract_to_markdown in HTTP mode. After calling this tool, PUT the file to upload_url (with the correct Content-Type header), then pass object_key as uploaded_file_reference to the processing tool.

Input Schema

{
  "type": "object",
  "properties": {
    "filename": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Original filename with extension (e.g. 'report.pdf')."
    },
    "file_size": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 2147483648,
      "description": "File size in bytes."
    },
    "mime_type": {
      "type": "string",
      "minLength": 1,
      "description": "MIME type (e.g. 'application/pdf', 'audio/mpeg')."
    },
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Optional Frenchie API key (fr_...). Falls back to the FRENCHIE_API_KEY env var when omitted."
    }
  },
  "required": [
    "filename",
    "file_size",
    "mime_type"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "upload_url": {
      "type": "string",
      "format": "uri",
      "description": "Presigned URL — PUT the file here with the correct Content-Type header"
    },
    "object_key": {
      "type": "string",
      "minLength": 1,
      "description": "Pass this as uploaded_file_reference to ocr_to_markdown, transcribe_to_markdown, or extract_to_markdown"
    },
    "expires_in": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "URL expiry in seconds"
    }
  },
  "required": [
    "upload_url",
    "object_key",
    "expires_in"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢fetch_result_file(object_key, api_key)

Get a temporary download URL for a result file from OCR/transcription output. Use this to download images referenced as frenchie-result: in the result markdown.

Input Schema

{
  "type": "object",
  "properties": {
    "object_key": {
      "type": "string",
      "minLength": 1,
      "description": "The object key parsed from a frenchie-result:<objectKey> reference in the result markdown."
    },
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Optional Frenchie API key (fr_...). Falls back to the FRENCHIE_API_KEY env var when omitted."
    }
  },
  "required": [
    "object_key"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "download_url": {
      "type": "string",
      "description": "Temporary HTTPS download URL for the result file."
    },
    "filename": {
      "type": "string",
      "description": "Suggested filename derived from the original object key."
    },
    "expires_in": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "URL expiry in seconds (typically 900)."
    }
  },
  "required": [
    "download_url",
    "filename",
    "expires_in"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools