Koskamo

web2mcp MCP

A zero-dependency Cloudflare Worker gateway that turns any website or REST API into MCP tools. It allows AI agents to call HTTP APIs by describing them in a config file, supporting features like OpenAPI import, token-friendly output, and safe request locking.

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.

web2mcp MCP logo, by charleswei118Community listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by charleswei118
MCP endpoint (Streamable HTTP)
https://web2mcp.cwei59969.workers.dev/mcp
Vendor documentation

What you can do with it

  • Turn any website or REST API into MCP tools
  • Search Wikipedia and read article summaries
  • Get weather forecasts and currency exchange rates
  • Convert OpenAPI 3 specs into connectors

Source and maintenance

Community listingRegistry 0.2.0
Maintenance checked

Protocol and capabilities

Server
web2mcp 0.2.0
MCP protocol
2025-06-18
Tools
15 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

web2mcp exposes websites and REST APIs as tools. Tool names are <connector>_<tool>. Results are JSON trimmed to the useful fields.

Tools

15 advertised

wikipedia_search — Wikipedia: search
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[wikipedia] Full-text search of English Wikipedia. Use this to find the right article title, then call wikipedia_summary with it. Returns titles, short descriptions and excerpts, best match first.

wikipedia_search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 5,
      "maximum": 20,
      "minimum": 1,
      "description": "Max results (1-20)"
    },
    "query": {
      "type": "string",
      "description": "What to search for"
    }
  },
  "additionalProperties": false
}
wikipedia_search annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
wikipedia_summary — Wikipedia: summary
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[wikipedia] Get the lead summary of an English Wikipedia article by its exact title (redirects are followed). If you are unsure of the title, use wikipedia_search first. Returns title, short description, the lead extract and the article url.

wikipedia_summary input schema
{
  "type": "object",
  "required": [
    "title"
  ],
  "properties": {
    "title": {
      "type": "string",
      "description": "Exact article title, e.g. 'Cloudflare'"
    }
  },
  "additionalProperties": false
}
wikipedia_summary annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
hackernews_front_page — Hacker News: front_page
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[hackernews] List the stories currently on the Hacker News front page, ranked as on the site. Use this to see what is trending now; use hackernews_search to find stories on a topic. Returns title, url, points, comment count and story id.

hackernews_front_page input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 30,
      "minimum": 1,
      "description": "Max stories (1-30)"
    }
  },
  "additionalProperties": false
}
hackernews_front_page annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
hackernews_search — Hacker News: search
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[hackernews] Full-text search of Hacker News stories (not comments) by keyword, ranked by relevance. Use this to find discussions about a product, project or topic; use hackernews_front_page for what is trending now. Returns title, url, points, comment count, date and story id.

hackernews_search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 30,
      "minimum": 1,
      "description": "Max results (1-30)"
    },
    "query": {
      "type": "string",
      "description": "Keywords to match in story titles and text, e.g. 'model context protocol'"
    }
  },
  "additionalProperties": false
}
hackernews_search annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
geocode_search — Open-Meteo Geocoding: search
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[geocode] Turn a city or place name into coordinates. Use this before weather_forecast, which needs latitude/longitude. A name can match several places, so up to `limit` candidates are returned, best match first, each with name, country, region, latitude, longitude and timezone.

geocode_search input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Place name, e.g. 'Shanghai'"
    },
    "limit": {
      "type": "integer",
      "default": 3,
      "maximum": 10,
      "minimum": 1,
      "description": "Max candidate places to return (1-10)"
    },
    "language": {
      "type": "string",
      "default": "en",
      "description": "Result language, e.g. en, zh"
    }
  },
  "additionalProperties": false
}
geocode_search annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
weather_forecast — Open-Meteo Weather: forecast
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[weather] Get current conditions and a daily forecast for a location given by coordinates. If you only have a place name, call geocode_search first. Returns temperature (°C), humidity, wind (km/h), WMO weather code, and per-day max/min temperature and precipitation (mm) in the location's local timezone.

weather_forecast input schema
{
  "type": "object",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "days": {
      "type": "integer",
      "default": 3,
      "maximum": 16,
      "minimum": 1,
      "description": "Number of forecast days including today (1-16)"
    },
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in decimal degrees, e.g. 31.23"
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in decimal degrees, e.g. 121.47"
    }
  },
  "additionalProperties": false
}
weather_forecast annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
currency_latest — Frankfurter exchange rates: latest
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[currency] Get the latest European Central Bank reference exchange rates (updated once per working day) from a base currency. Omit symbols to get all ~30 currencies. Returns an object with base, date and a rates map, e.g. rates.CNY.

currency_latest input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "base": {
      "type": "string",
      "default": "USD",
      "description": "Base currency, e.g. USD"
    },
    "symbols": {
      "type": "string",
      "description": "Comma-separated targets, e.g. CNY,EUR (optional)"
    }
  },
  "additionalProperties": false
}
currency_latest annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
github_search_repos — GitHub: search_repos
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[github] Find public GitHub repositories matching a query. Use this when you don't know the exact repo; use github_repo when you already have owner and name. Supports GitHub qualifiers like 'mcp language:rust stars:>100'. Returns up to `limit` repos (full_name, description, stars, language, url, updated_at). Unauthenticated calls share a low rate limit.

github_search_repos input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "sort": {
      "enum": [
        "stars",
        "updated",
        "forks"
      ],
      "type": "string",
      "default": "stars",
      "description": "Sort order: most stars, most recently updated, or most forks"
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 30,
      "minimum": 1,
      "description": "Max repositories to return (1-30)"
    },
    "query": {
      "type": "string",
      "description": "Search text with optional GitHub qualifiers, e.g. 'mcp server language:typescript'"
    }
  },
  "additionalProperties": false
}
github_search_repos annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
github_repo — GitHub: repo
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[github] Get metadata for one public repository you already know by owner and name: description, stars, forks, language, license, topics, url and last push time. Use github_search_repos first if you only have keywords. Returns an error if the repo does not exist or is private.

github_repo input schema
{
  "type": "object",
  "required": [
    "owner",
    "repo"
  ],
  "properties": {
    "repo": {
      "type": "string",
      "description": "Repository name only, without the owner, e.g. 'workers-sdk'"
    },
    "owner": {
      "type": "string",
      "description": "User or organization that owns the repo, e.g. 'cloudflare'"
    }
  },
  "additionalProperties": false
}
github_repo annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
npm_package — npm: package
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[npm] Get the latest version, description, license and homepage of an npm package. For download counts use npmstats_downloads instead. Returns an error if the package does not exist.

npm_package input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name, e.g. 'express' or '@types/node'"
    }
  },
  "additionalProperties": false
}
npm_package annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
npmstats_downloads — npm stats: downloads
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[npmstats] Get how many times an npm package was downloaded in the last 7 days, as a popularity signal. For version or license info use npm_package instead. Returns package, downloads, start and end dates.

npmstats_downloads input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name, e.g. 'express' or '@types/node'"
    }
  },
  "additionalProperties": false
}
npmstats_downloads annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
arxiv_search — arXiv: search
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[arxiv] Search arXiv research papers by keyword across title, abstract and authors, ranked by relevance. Use it for academic preprints; use wikipedia_search for general background. Returns id/link, title, publication date, authors and abstract.

arxiv_search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 5,
      "maximum": 20,
      "minimum": 1,
      "description": "Max results (1-20)"
    },
    "query": {
      "type": "string",
      "description": "Keywords, e.g. 'model context protocol'"
    }
  },
  "additionalProperties": false
}
arxiv_search annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
holidaycn_year — China public holidays: year
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[holidaycn] List every official holiday day off and every make-up workday (调休上班) in mainland China for one year, e.g. to tell whether a date is a working day or plan around 春节/国庆. Returns entries of name (Chinese holiday name), date (YYYY-MM-DD) and isOffDay (true = day off, false = make-up workday). Ordinary weekends are not listed; a date that is absent follows the normal Mon-Fri rule. Data usually appears in November for the next year.

holidaycn_year input schema
{
  "type": "object",
  "required": [
    "year"
  ],
  "properties": {
    "year": {
      "type": "integer",
      "maximum": 2100,
      "minimum": 2007,
      "description": "Four-digit year, e.g. 2026 (data from 2007 on)"
    }
  },
  "additionalProperties": false
}
holidaycn_year annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
baiduhot_realtime — Baidu hot search: realtime
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[baiduhot] Get the current Baidu real-time hot search ranking (百度热搜榜): what Chinese internet users are searching for right now. Use it for Chinese news and trending topics; use hackernews_front_page for English tech news. Returns up to 50 entries of word (topic in Chinese), index (rank; the pinned item has none) and url (Baidu search link).

baiduhot_realtime input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
baiduhot_realtime annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
shici_random — Chinese classical poetry: random
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

[shici] Get one random famous line of classical Chinese poetry (诗/词/曲), optionally from a theme. Use it for a daily quote, a greeting card line or a writing prompt. Returns content (the line), origin (poem title), author and category (theme path such as 古诗文-抒情-感恩).

shici_random input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "theme": {
      "enum": [
        "all",
        "shuqing",
        "siji",
        "shanshui",
        "tianqi",
        "renwu",
        "shenghuo",
        "jieri",
        "dongwu",
        "zhiwu"
      ],
      "type": "string",
      "default": "all",
      "description": "Theme: all (default), or a category path such as shuqing (抒情), siji (四季), shanshui (山水), tianqi (天气), renwu (人物), shenghuo (生活), jieri (节日), dongwu (动物), zhiwu (植物)"
    }
  },
  "additionalProperties": false
}
shici_random annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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
190 ms
95th percentile latency
190 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 190 ms · metadata changed · 15 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http web2mcp-mcp https://web2mcp.cwei59969.workers.dev/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add web2mcp-mcp --url https://web2mcp.cwei59969.workers.dev/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable web2mcp-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "web2mcp-mcp": {
      "url": "https://web2mcp.cwei59969.workers.dev/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "web2mcp-mcp": {
      "type": "streamableHttp",
      "url": "https://web2mcp.cwei59969.workers.dev/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start web2mcp-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "web2mcp-mcp": {
      "type": "http",
      "url": "https://web2mcp.cwei59969.workers.dev/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http web2mcp-mcp https://web2mcp.cwei59969.workers.dev/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "web2mcp-mcp": {
      "url": "https://web2mcp.cwei59969.workers.dev/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "web2mcp-mcp": {
      "serverUrl": "https://web2mcp.cwei59969.workers.dev/mcp"
    }
  }
}

Let your agent find its tools

Find servers like web2mcp MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.