curlmcp
A Multi-modal Conversation Protocol (MCP) server that enables interacting with web APIs through a curl-like interface, providing access to various websites and APIs with user authentication and response transformations.
A Multi-modal Conversation Protocol (MCP) server that enables interacting with web APIs through a curl-like interface, providing access to various websites and APIs with user authentication and response transformations.
[!IMPORTANT] WORK IN PROGRESS
Requirements:
How should product builders of today become ready to allow for this?
/openapi.json
, or by putting redirecting to it from /.well-known/openapi
if that's not possible.Is it somehow possible to provide this as a middleware to APIs? For sure! The one tool to rule them all is curl (or fetch), and it could be made safe in the following way:
Install it into your MCP Client by adding the following to your config:
{
"mcpServers": {
"curlmcp": {
"command": "npx",
"args": ["mcp-remote", "https://curlmcp.com/sse"]
}
}
}
The curlmcp api is easy to use from the browser too. Authentication is automatically handled.
You can simply use curl yourself, or to have the curl mcp proxy:
curl -c cookies.txt https://curlmcp.com/login
to login and store cookiescurl -b cookies.txt https://curlmcp.com/curl/{your-request}
/curl/{url}
EndpointThe /curl/{url}
endpoint allows you to send HTTP requests to any URL, mimicking the behavior of the curl
command-line tool. It supports long-form query parameters to specify request details, such as the HTTP method, headers, and data.
Certain urls are configured to be proxied based on your configured template (defaults to default-proxy.yaml)
GET /curl/{url}?request={method}&header={header}&data={data}&...
NB: {url} uses the https
protocol by default.
Parameter | Type | Description | Example |
---|---|---|---|
request |
string | Specifies the HTTP method. Valid values: GET , POST , PUT , DELETE , PATCH , HEAD , OPTIONS . |
request=POST |
header |
array of strings | Adds custom HTTP headers. Repeat for multiple headers. | header=Content-Type:application/json |
data |
array of strings | Sends data in the request body (POST) or query string (with get=true ). Repeat for multiple data pairs. |
data=key=value |
data-urlencode |
array of strings | Sends URL-encoded data in the request. | data-urlencode=comment=this%20is%20awesome |
get |
boolean | Forces data to be sent as a GET request query string. | get=true |
include |
boolean | Includes response headers in the output. | include=true |
head |
boolean | Sends a HEAD request. | head=true |
user |
string | Specifies credentials for authentication (format: username:password ). |
user=user:pass |
location |
boolean | Follows HTTP redirects. | location=true |
verbose |
boolean | Enables verbose output for debugging. | verbose=true |
access_token |
string | Injects an OAuth token for X or GitHub authentication. | access_token=xyz |
instructions |
string | Specifies contextual instructions for the request. | instructions=transform_response_to_markdown |