[!IMPORTANT]
๐ค Read this with your AI agent โ don't read it by hand.
This repo is written agent-first. Point Claude Code, GitHub Copilot, Cursor, or any agent at it:"Read the README and AGENTS.md, then help me run / extend this."Structure +
AGENTS.mdare optimized for agent comprehension.
๐ femtech-radar
FemTech intelligence as a GitHub-native, agent-driven pipeline
Agent-first FemTech intelligence: an MCP server that fetches, dedupes, and scores women's-health & FemTech research and industry news, designed to feed GitHub Agentic Workflows and an auto-updating Astro + RSS site.
Live Demo ยท Documentation ยท Changelog ยท Report Bug ยท Request Feature
- ๐ Introduction
- โจ Key Features
- ๐ ๏ธ Tech Stack
- ๐๏ธ Architecture
- ๐ Getting Started
- ๐ณ Project Status & Roadmap
- ๐ Usage Guide
- โจ๏ธ Development
- ๐ค Contributing
- โค๏ธ Sponsor
- ๐ License
- ๐โโ๏ธ Author
๐ Introduction
The FemTech and women's-health world produces a scattered firehose of signal โ research preprints, funding and product news, community opportunities, technical discussion โ across dozens of sources. femtech-radar turns that noise into a curated, deduplicated, ranked digest, using only GitHub-native primitives plus a reusable Model Context Protocol (MCP) server.
This repository is v1: the MCP server โ the deterministic "brain" of the pipeline. It fetches items from multiple sources, normalizes them into one shape, removes duplicates, and scores each item by relevance ร popularity ร freshness, then exposes the result over MCP so it can be driven by a GitHub Agentic Workflow (gh aw), Claude Desktop, or any MCP client.
It's built for FemTech / women-in-tech practitioners who want signal without the noise โ and as a reference implementation of the gh aw ร MCP ร GitHub Pages pattern. The eventual product (see Roadmap) is a subscribable weekly intelligence site that updates itself for free on a public GitHub repo.
โจ Key Features
1 One MCP tool, a whole radar โ radar_collect returns normalized, deduped, scored items per section. v1 ships industry (Google News) and research (arXiv); opportunities and discussions are defined and roadmapped.
2 Deterministic, testable core โ fetch โ normalize โ dedupe โ score. The server makes no editorial judgment; that's left to the agent that drives it. 28 unit tests, and zero real network calls in tests (all I/O is injected).
3 Pluggable source adapters โ each source is one file behind a uniform Adapter interface. Add a feed by writing a collect() that returns RadarItem[].
4 Resilient by construction โ every source failure degrades to an empty result plus a warning; a malformed URL or date never throws out of a run.
5 GitHub-native, near-zero cost โ designed to run inside GitHub Actions on a public repo, where Actions and Pages are free; the only metered resource is a few Copilot credits per week.
6 Reusable anywhere MCP runs โ drop it into Claude Desktop or any MCP client; it isn't coupled to this project.
๐ ๏ธ Tech Stack
- Language / Runtime: TypeScript 5 (strict, ESM) ยท Node.js โฅ 20
- MCP:
@modelcontextprotocol/sdk(stdio server) - Parsing / validation: Zod (schema & runtime validation) ยท fast-xml-parser (Atom/RSS)
- Tooling: pnpm workspaces (monorepo) ยท Vitest (tests) ยท tsup (build)
- Roadmap layers: GitHub Agentic Workflows (
gh aw) orchestration ยท Astro + RSS site on GitHub Pages
๐๏ธ Architecture
System overviewgraph TD
subgraph Sources
A1[arXiv API]
A2[Google News RSS]
end
A1 --> AD[Source adapters<br/>normalize โ RadarItem]
A2 --> AD
AD --> P["collect()<br/>dedupe โ score โ sort โ since-filter"]
P --> T[MCP tools<br/>radar_collect ยท radar_sources]
T --> C[MCP clients]
C -.roadmap.-> W[Weekly gh aw workflow]
W -.roadmap.-> S[Astro + RSS site on GitHub Pages]
Separation of determinism vs judgment: the MCP server does only deterministic work (fetch, normalize, dedupe, score). Editorial choices โ which items to feature, how to summarize โ belong to the agent (gh aw + Copilot) that drives it. This keeps the core unit-testable and reusable.
๐ Getting Started
Prerequisites
- Node.js โฅ 20 (the server uses global
fetch) - pnpm โฅ 9 (
npm i -g pnpm) - (optional) an MCP client such as Claude Desktop, or the
gh awCLI
Installation
git clone https://github.com/ChanMeng666/femtech-radar.git
cd femtech-radar
pnpm install
# Build the MCP server
pnpm --filter @chanmeng666/femtech-radar-mcp build
# Run the test suite (28 tests)
pnpm --filter @chanmeng666/femtech-radar-mcp test
The built server is an executable stdio MCP server at packages/mcp-server/dist/index.js.
๐ณ Project Status & Roadmap
This is the first of three planned layers (see docs/superpowers/specs for the full design):
- โ
v1 โ MCP server (this release): industry (Google News) + research (arXiv) adapters, dedupe/score pipeline,
radar_collect/radar_sourcestools, resilient error handling, 28 tests. - โณ v2 โ orchestration: opportunities + discussions adapters, publish to npm, a weekly
gh awworkflow that curates a digest, ChatOps slash commands. - โณ v3 โ publishing: an Astro + RSS site auto-deployed to GitHub Pages from the weekly data.
๐ Usage Guide
femtech-radar is consumed as an MCP server. It exposes two tools:
| Tool | Parameters | Returns |
|---|---|---|
radar_collect |
section ("industry" | "research" | "opportunities" | "discussions"), optional since (ISO date, default 7 days ago), optional limit (default 15) |
{ items: RadarItem[], warnings: string[] } โ deduped, scored, sorted, date-filtered |
radar_sources |
none | the configured source list per section |
In v1 only
industryandresearchhave adapters;opportunitiesanddiscussionsreturn an empty list with a"no adapter for โฆ"warning.
Use with GitHub Agentic Workflows (gh aw)
mcp-servers:
femtech-radar:
command: npx
args: ["-y", "@chanmeng666/femtech-radar-mcp"]
Use with Claude Desktop
{
"mcpServers": {
"femtech-radar": {
"command": "node",
"args": ["/absolute/path/to/femtech-radar/packages/mcp-server/dist/index.js"]
}
}
}
npx @chanmeng666/femtech-radar-mcpworks once the package is published to npm (v2). Until then, build locally and point your client atdist/index.jsas shown above.
See packages/mcp-server/README.md for the full tool reference.
โจ๏ธ Development
pnpm install # install workspace deps
pnpm --filter @chanmeng666/femtech-radar-mcp test # run tests (Vitest)
pnpm --filter @chanmeng666/femtech-radar-mcp build # build with tsup
Project layout
packages/mcp-server/src/
โโโ schema.ts # Zod RadarItem / WeeklyData (the shared data contract)
โโโ dedup.ts # URL canonicalization + title-similarity dedupe
โโโ score.ts # relevance ร popularity ร freshness scoring
โโโ adapters/ # one file per source (research = arXiv, industry = Google News)
โโโ collect.ts # orchestration: adapter โ dedupe โ score โ sort โ since-filter
โโโ tools.ts # radar_collect / radar_sources handlers
โโโ index.ts # stdio MCP server entry
Adding a source adapter: implement the Adapter interface in adapters/, return RadarItem[] from collect(opts) using the injected fetcher (never call fetch directly โ that keeps it testable), then wire it into ADAPTERS in collect.ts.
See AGENTS.md for AI-agent-oriented project conventions and gotchas.
๐ค Contributing
Contributions make the open-source community an amazing place to learn and create. Please read theContributing Guide and the Code of Conduct before you start,and use the provided issue / pull-request templates.
โค๏ธ Sponsor
If this project helps you, please consider supporting its development:
For questions and help, see SUPPORT.md. For security issues, see SECURITY.md.
๐ License
This project is released under the MIT license.
๐โโ๏ธ Author
Chan Meng