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