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 |
Discover shared experiences
Shared threads will appear here, showcasing real-world applications and insights from the community. Check back soon for updates!