{"slug": "mcp-servers-are-just-rest-apis-in-a-polite-wrapper-here-s-5-lines-of-python", "title": "MCP servers are just REST APIs in a polite wrapper - here's 5 lines of Python", "summary": "A developer demonstrated that MCP (Model Context Protocol) servers are essentially REST APIs with a polite wrapper, showing how to access the Helium MCP server's underlying HTTP endpoints directly using Python's `requests.get()` in just five lines of code. The Helium MCP server, which provides ML option fair values and 31-dimension news-bias scores, offers 50 free queries per IP without requiring signup or an API key, making it accessible for integration into Streamlit apps, Jupyter notebooks, or Discord bots without ever using Claude Desktop.", "body_md": "If you've been watching the MCP (Model Context Protocol) ecosystem from the sidelines, here's a quietly important detail: a lot of MCP servers are also just plain REST APIs underneath. The MCP layer is a polite wrapper that says \"Claude, here are tools you can call.\" But the underlying HTTP endpoints are right there, ready to be called from `requests.get(...)`\n\nlike any other JSON API.\n\nThat matters because **the most interesting MCP servers are useful even if you've never opened Claude Desktop or Cursor.** You can drop them into a Streamlit app, a Jupyter notebook, a Lambda function, a Discord bot, an Airflow DAG, or a cron job. The MCP integration is gravy on top.\n\nI'll show this with a concrete example: pulling per-symbol ML option fair values and 31-dimension news-bias scores into pandas in 5 lines.\n\nI run [Helium MCP](https://github.com/connerlambden/helium-mcp), which started as an MCP server and recently grew a plain REST surface. Both speak the same data:\n\nThe MCP endpoint is `https://heliumtrades.com/mcp`\n\n. The REST endpoints live under `https://heliumtrades.com/`\n\nwith paths like `/mcp_search/`\n\n, `/mcp_option_price/`\n\n, `/mcp_ticker/`\n\n, `/mcp_url_bias/`\n\n. 50 free queries per IP. No signup, no API key needed for the free tier.\n\n``` python\nimport requests\n\nr = requests.get(\n    \"https://heliumtrades.com/mcp_search/\",\n    params={\"q\": \"apple earnings\", \"limit\": 3},\n    timeout=30,\n)\nprint(r.json())\n```\n\nYou get back a JSON list of articles with full bias scoring across all 31 dimensions per article: `credibility`\n\n, `sensationalism`\n\n, `overconfidence`\n\n, `opinion_vs_fact`\n\n, `scapegoating`\n\n, `ai_authorship_probability`\n\n, `covering_responses`\n\n, `oversimplification`\n\n, and 23 more.\n\nThis is where it gets fun. The JSON is already flat enough that pandas just works:\n\n``` python\nimport pandas as pd, requests\n\nresp = requests.get(\n    \"https://heliumtrades.com/mcp_search/\",\n    params={\"q\": \"federal reserve\", \"limit\": 50},\n)\ndf = pd.json_normalize(resp.json())\nprint(df[[\"source\", \"credibility\", \"sensationalism\", \"opinion_vs_fact\"]].head())\n```\n\nNow you can do everything pandas does: groupby source, compute mean credibility, plot a credibility-vs-sensationalism scatter, filter to high-AI-authorship-probability articles, etc.\n\n``` python\nimport requests\n\nr = requests.get(\n    \"https://heliumtrades.com/mcp_option_price/\",\n    params={\n        \"symbol\": \"AAPL\",\n        \"strike\": 200,\n        \"expiration\": \"2026-06-19\",\n        \"option_type\": \"call\",\n    },\n)\nprint(r.json())\n# {'predicted_price': 20.64, 'prob_itm': 0.52, 'delta': 0.55, 'gamma': 0.02, 'vega': 0.41, ...}\n```\n\nYou get back a model-derived fair value and prob_ITM next to market price. The diff between the two is a (testable, scorable) prediction.\n\nOnce the API returns JSON, building a Streamlit app is essentially a wrapper exercise:\n\n``` python\nimport streamlit as st, requests, pandas as pd\n\nq = st.text_input(\"Search query\", \"tariffs\")\nlimit = st.slider(\"Results\", 1, 50, 10)\n\nif st.button(\"Go\"):\n    resp = requests.get(\n        \"https://heliumtrades.com/mcp_search/\",\n        params={\"q\": q, \"limit\": limit},\n    )\n    df = pd.json_normalize(resp.json())\n    st.dataframe(df[[\"title\", \"source\", \"credibility\", \"sensationalism\", \"ai_authorship_probability\"]])\n    st.bar_chart(df.groupby(\"source\")[\"credibility\"].mean())\n```\n\nThis is the smallest realistic media-bias dashboard I've ever written. It's about 12 lines.\n\nThe point isn't that this one API is special. The point is that **MCP servers with REST surfaces are a quietly powerful new class of API.** They are:\n\nIf you're a data scientist who's never installed Claude Desktop and never wants to: that's fine. Treat MCP servers as a directory of unusually well-curated free REST APIs and start with the ones that solve a problem you already have.\n\nFor finance and news intelligence specifically, the full Helium MCP REST endpoint list is:\n\n| Endpoint | Purpose | Params |\n|---|---|---|\n`/mcp_search/` |\nNews search across 3.2M articles |\n`q` , `limit`\n|\n`/mcp_balanced_search/` |\nMulti-perspective news synthesis |\n`q` , `limit`\n|\n`/mcp_source_bias/` |\n31-dim bias profile for one source | `source` |\n`/mcp_url_bias/` |\n31-dim bias profile for one article URL | `url` |\n`/mcp_all_source_biases/` |\nAll scored sources | - |\n`/mcp_ticker/` |\nReal-time market data for a symbol | `ticker` |\n`/mcp_option_price/` |\nML option fair value + Greeks |\n`symbol` , `strike` , `expiration` , `option_type`\n|\n`/mcp_historical_options/` |\nFull options chain with ML fair values |\n`symbol` , `date`\n|\n`/mcp_top_strategies/` |\nAI-ranked options strategies |\n`limit` , `sort`\n|\n`/mcp_meme_search/` |\nSemantic meme search |\n`q` , `limit`\n|\n\nThe MCP server config (for Cursor / Claude Desktop / Windsurf) is:\n\n```\n{ \"mcpServers\": { \"helium\": { \"url\": \"https://heliumtrades.com/mcp\" } } }\n```\n\nBut honestly - if Python is your thing - just open a notebook and `requests.get`\n\n. The whole point of a public REST surface is that you don't have to care about anything else.\n\nSource, schema, full tool spec: [github.com/connerlambden/helium-mcp](https://github.com/connerlambden/helium-mcp). Page: [heliumtrades.com/mcp-page](https://heliumtrades.com/mcp-page/).\n\nIf you build something with it, I'd love to see it. Open an issue, or send a notebook - happy to feature good demos.", "url": "https://wpnews.pro/news/mcp-servers-are-just-rest-apis-in-a-polite-wrapper-here-s-5-lines-of-python", "canonical_source": "https://dev.to/connerlambden/mcp-servers-are-just-rest-apis-in-a-polite-wrapper-heres-5-lines-of-python-58pn", "published_at": "2026-05-26 22:38:09+00:00", "updated_at": "2026-05-26 23:03:47.672384+00:00", "lang": "en", "topics": ["ai-tools", "ai-infrastructure"], "entities": ["Helium MCP", "Claude Desktop", "Cursor", "Streamlit", "Jupyter", "Lambda", "Discord", "Airflow"], "alternates": {"html": "https://wpnews.pro/news/mcp-servers-are-just-rest-apis-in-a-polite-wrapper-here-s-5-lines-of-python", "markdown": "https://wpnews.pro/news/mcp-servers-are-just-rest-apis-in-a-polite-wrapper-here-s-5-lines-of-python.md", "text": "https://wpnews.pro/news/mcp-servers-are-just-rest-apis-in-a-polite-wrapper-here-s-5-lines-of-python.txt", "jsonld": "https://wpnews.pro/news/mcp-servers-are-just-rest-apis-in-a-polite-wrapper-here-s-5-lines-of-python.jsonld"}}