https://github.com/ekoindia/eps-platform
EPS Monorepo — Eko's AI-native developer platform, REST API documentation, MCP servers, mock servers and marketing website
https://github.com/ekoindia/eps-platform
agentic-workflows ai-skills developer-portal marketing-website mcp-servers openapi-spec rest-api-documentation
Last synced: 23 days ago
JSON representation
EPS Monorepo — Eko's AI-native developer platform, REST API documentation, MCP servers, mock servers and marketing website
- Host: GitHub
- URL: https://github.com/ekoindia/eps-platform
- Owner: ekoindia
- License: other
- Created: 2026-02-24T06:44:52.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-06-23T08:37:37.000Z (23 days ago)
- Last Synced: 2026-06-23T10:12:27.146Z (23 days ago)
- Topics: agentic-workflows, ai-skills, developer-portal, marketing-website, mcp-servers, openapi-spec, rest-api-documentation
- Language: TypeScript
- Homepage: https://eps.eko.in
- Size: 10.6 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
- Agents: AGENTS.md
Awesome Lists containing this project
README

# Eko Platform Services
[](https://github.com/ekoindia/eps-platform/actions/workflows/ci.yml)
[](https://github.com/ekoindia/eps-platform/actions/workflows/release.yml)
[](LICENSE)
[](https://nodejs.org)
[](https://eps.eko.in/docs)
[](https://www.npmjs.com/package/@ekoindia/eps-sdk)
[](https://www.npmjs.com/package/@ekoindia/eps-context-mcp)
[](https://www.npmjs.com/package/@ekoindia/eps-mock-server)
**The AI-ready developer platform for [Eko Platform Services](https://eps.eko.in) — India's fintech APIs** (AePS, DMT, BBPS, PPI wallets, KYC & verification, agent banking).
A single source-of-truth **data layer** describes every EPS API once. From it, the build generates everything a developer — or their AI coding agent — needs to integrate: backend SDKs, an MCP server, drop-in AI context packs, an offline mock server, OpenAPI + Postman, LLM-readable docs, and the marketing + developer-docs website itself. Edit the data, and every artifact regenerates in sync.
## Why this exists
- **One source of truth, zero drift.** Specs, SDKs, MCP, docs, OpenAPI and code samples all derive from the same data layer (`src/lib/data/`). No hand-maintained copies that fall out of date.
- **AI-ready by design.** Ships an MCP server plus drop-in context packs (`CLAUDE.md`, `AGENTS.md`, `.cursorrules`, `copilot-instructions.md`) so agents integrate EPS correctly — including the tricky parts: per-request HMAC-SHA256 signing and multi-step recipes (e.g. the DMT `463 → onboard sender` branch).
- **Backend-safe SDKs.** JS and PHP SDKs are generated from an SDK surface with signing built in and cross-language golden-vector conformance tests. Coverage is a growing subset — see the [API coverage roadmap](docs/api-coverage-roadmap.md).
- **Open & offline.** The MCP runs locally with a baked-in bundle (no hosted service, no secrets); an offline mock server replays recorded fixtures for tests.
## Use EPS
```bash
# AI agent context (any MCP-capable harness)
npx -y @ekoindia/eps-context-mcp
# Backend SDKs (server-side only — signing key must stay secret)
npm install @ekoindia/eps-sdk # Node.js
composer require ekoindia/eps-sdk # PHP 8.1+
# Offline mock server for local dev & tests
npx -y @ekoindia/eps-mock-server
```
For Claude Code, install the bundled plugin (wires the MCP + skills + `/eps` command). Point any agent at the site's `/llms.txt` and `/ai` hub for the full machine-readable index.
## Project structure
```
src/
lib/
data/ # ← source-of-truth data layer (specs, products, recipes, industries, solutions, pricing)
agent/ # generators: agent bundle, fixtures, install matrix, context packs
sdk/ # generators: SDK surface, Postman collection
openapi/ # generator: OpenAPI 3.1 document
markdown/ # generators: /llms.txt, /index.md, /products.md, per-page markdown
config/ # site-wide config constants (site URL, API endpoints)
components/ hooks/ pages/ assets/ # the React website
App.tsx / AppServer.tsx / entry-server.tsx / main.tsx # SPA + SSG entry points
ssg/ # custom Vite plugin for static pre-rendering
public/ # static files served as-is (robots.txt, _redirects)
docs/ # detailed documentation (index below)
vite-plugin-generate-*.ts # build-time emitters (openapi, agent bundle, markdown, xlsx)
packages/ # published artifacts (each baked from the build output):
eps-context-mcp/ # @ekoindia/eps-context-mcp — local MCP server (npm)
sdk-js/ # @ekoindia/eps-sdk — Node.js backend SDK (npm)
eps-mock-server/ # @ekoindia/eps-mock-server — offline mock server (npm)
sdk-php/ # ekoindia/eps-sdk — PHP backend SDK (Composer/Packagist)
claude-plugin-eps/ # Claude Code plugin bundle (manifest + skills + /eps command; not an npm package)
dist/ # build output (generated, gitignored)
packages/*/data/ # baked artifacts copied here at build time (generated, gitignored — never hand-edit)
```
That's **3 npm packages, 1 Composer package, and 1 Claude Code plugin bundle**.
> [!CAUTION]
> The `packages/*/data/` files are generated outputs — they may be present in your working tree but are gitignored and **must never be hand-edited or committed**.
## Data & configuration
**Source-of-truth data** (`src/lib/data/`):
| File | Role |
|------|------|
| [`api-specs.ts`](src/lib/data/api-specs.ts) | Technical REST specs, one entry per API (deltas only) |
| `api-auth.ts` / `api-error-codes.ts` / `api-specs-common.ts` | Shared auth headers, error catalog, common params/envelopes + resolvers |
| [`api-products.ts`](src/lib/data/api-products.ts) | API product registry + metadata |
| [`api-product-pages.ts`](src/lib/data/api-product-pages.ts) | Product-page marketing content (hero, features, FAQs, SEO) — no technical data |
| `api-recipes.ts` | Multi-step integration recipes (e.g. DMT onboard-then-transfer) |
| [`industries.ts`](src/lib/data/industries.ts) / [`solutions.ts`](src/lib/data/solutions.ts) | Industry pages + solution/pack definitions |
| `api-pricing.ts` / `payments-pricing.ts` | Pricing data (drives pricing page + xlsx calculator) |
| `docs-registry.ts` | Merges MDX guides + API endpoints into the docs nav |
**Config files** (root): `package.json` (npm workspaces), `vite.config.ts`, `vitest.config.ts`, `tsconfig*.json`, `eslint.config.js`, `components.json`, the `vite-plugin-generate-*.ts` emitters, and per-platform deploy rewrites (`vercel.json`, `netlify.toml`, `nginx.conf`, `.htaccess`).
> [!TIP]
> A full index of **every** configuration file lives in [docs/configuration.md](docs/configuration.md).
## How it works
```
src/lib/data/ ──▶ npm run build
├─ vite build → dist/ (website, openapi.json, /agent/*.json + per-API & per-topic slices,
│ context packs, /llms.txt, /index.md, /products.md, pricing xlsx)
└─ bake:all → copies the relevant artifacts into each packages/*/data/
(then each package builds & publishes from there)
```
`npm run build` runs the Vite build and then invokes `bake:all` automatically — you don't run them separately.
## Develop this repo
**Setup** (Node `>=20`):
```bash
npm install
npm run dev # local dev server
npm run build # full build + bake (generates all artifacts)
npm test # vitest run
npm run lint # eslint
```
`npm install`, `npm run build`, `npm run lint`, and `npm test` all run **without any
credentials** — no API keys are needed to build the site or run the suite. Sandbox
credentials are only required to exercise the `/docs` **"Try it"** console live: copy
[`.env.example`](.env.example) → `.env.local` and fill in your own Eko UAT/sandbox keys.
Those values are read only during `vite dev` (gated by `import.meta.env.DEV`), are never
bundled into production, and the access key is used purely for in-browser HMAC signing.
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full contributor workflow.
**How to add things:**
| Add a… | Edit | Guide |
|--------|------|-------|
| API product | `api-products.ts` + `api-product-pages.ts`, then add it to `ProductsSection.tsx` tabs | [docs/configuration.md](docs/configuration.md) |
| API spec | `api-specs.ts` (set `productId`) | [docs/api-specs.md](docs/api-specs.md) |
| Dev-docs API reference | (auto from `api-specs.ts`) | [docs/developer-docs/api-documentation.md](docs/developer-docs/api-documentation.md) |
| Dev-docs guide (MDX prose) | add MDX guide | [docs/developer-docs/mdx-guides.md](docs/developer-docs/mdx-guides.md) |
| Industry / Solution pack | `industries.ts` / `solutions.ts` | [docs/industry-and-packs-plan.md](docs/industry-and-packs-plan.md) |
| AI artifact / context pack | `src/lib/agent/` generators | [docs/ai-agent-platform.md](docs/ai-agent-platform.md) |
**Gotchas:**
- `packages/*/data/` and `dist/` are **generated** by the build/`bake:all` — never hand-edit, never commit (gitignored). If a preview shows changes there, that's build output, not source.
- The site builds to **static pre-rendered HTML** (SSG) for every known route; unknown routes fall back to the SPA shell (`__spa-fallback.html`) via each platform's catch-all rewrite. See [docs/static-page-generation.md](docs/static-page-generation.md) and [docs/ssg-hydration.md](docs/ssg-hydration.md).
- After a redeploy, stale JS chunks auto-reload — see [docs/chunk-error-auto-reload.md](docs/chunk-error-auto-reload.md).
- **Deploy:** build locally, then deploy `dist/` to any of Vercel / Netlify / Apache / Nginx — each reads only its own rewrite file (`vercel.json` / `netlify.toml` / `.htaccess` / `nginx.conf`), so they don't conflict.
## Documentation
**Platform & AI**
- [AI agent platform](docs/ai-agent-platform.md)
- [API coverage roadmap](docs/api-coverage-roadmap.md)
**API & data model**
- [API technical specifications](docs/api-specs.md)
- [Markdown / LLM content generation](docs/markdown-generation.md)
- [Developer-docs portal architecture](docs/developer-docs/)
- [Industries & solution packs plan](docs/industry-and-packs-plan.md)
**SDKs & release**
- [SDK golden-vector conformance](docs/sdk-golden-vector.md)
- [Releasing the agent packages](docs/releasing-agent-packages.md)
**Site build & ops**
- [Configuration — every config file](docs/configuration.md)
- [Static page generation (SSG)](docs/static-page-generation.md) · [hydration rules](docs/ssg-hydration.md)
- [Pricing calculator](docs/pricing-calculator.md) · [Command palette (⌘K)](docs/command-palette-search.md) · [Stale-chunk auto-reload](docs/chunk-error-auto-reload.md)
## Tech stack
Vite · React · TypeScript · Tailwind CSS · shadcn-ui · npm workspaces.
## Contributing & security
- [CONTRIBUTING.md](CONTRIBUTING.md) — dev setup, branch/commit conventions, PR workflow.
- [SECURITY.md](SECURITY.md) — how to report a vulnerability (please do **not** open a
public issue for security reports).
- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) — community standards.
## License
Source code is released under the [MIT License](LICENSE). The MIT grant
covers the **code** only. The **"Eko" name, logos, and brand assets** are trademarks of
their owner and are **not** licensed for reuse. Marketing copy, page content, and design
assets under `src/` and `public/` may be subject to separate terms — see `LICENSE` for the
exact scope before reusing non-code material.