TypeScript, ES modules. Runs in two modes: stdio (local CLI clients, stdio.ts) and HTTP Streamable (dev_server.ts).
This applies to ALL written output: code comments, commit messages, PR descriptions, issue specs
- Plain language, no fluff. Say what you mean in the fewest words. No filler phrases, no motivational preambles, no "this will improve the developer experience."
- Minimal. Implement only what's explicitly requested. No speculative features, no hypothetical future-proofing — solve the current problem, not imagined ones.
- One thing per change. Bug fix fixes only the bug — no cleanup, no renames, no drive-by refactors. Mention unrelated issues; don't fix them.
- Test first for bug fixes. Write a failing test that reproduces the bug, confirm it fails, then fix.
- Refactoring is a separate PR. If a feature needs refactoring, land the refactor first, then the feature. Never mix.
- Fix by adjusting, not adding. Prefer a 1-line fix over a 10-line fix. Prefer adjusting existing code over adding new branches. Search for existing helpers and patterns that already handle similar cases. Ask: "Am I adding code, or fixing the code that's already there?"
- Self-review your diff. Before declaring done, review: Is this the minimal fix? Am I reusing existing patterns? Did I leave any debug artifacts?
Conventional Commits for all three. Branch: type/short-desc (e.g. fix/connection-timeout). Commit/PR title: type: Description (e.g. fix: Handle connection errors). Types: feat, fix, chore, refactor, docs. Append ! for breaking changes. PR title ≤70 chars.
After every code change, run npm run type-check, npm run lint, and npm run test:unit.
Zero tolerance for errors — fix before proceeding, don't defer.
- Do NOT use
npm run buildfor type-checking. Usenpm run type-check— it is faster and skips JavaScript output generation. Only usenpm run buildwhen compiled output is explicitly needed (e.g., before mcpc probing). - Do NOT run integration tests as an agent. They require a valid
APIFY_TOKENand are slow.
After code changes, verify the server works — not just that it compiles.
mcpc (scripted): needs npm run build first (runs dist/stdio.js) and APIFY_TOKEN in env.
npm run build
mcpc connect .mcp.json:stdio @stdio # first time only
mcpc @stdio restart # after code changes
mcpc @stdio tools-call search-actors keywords:="web scraper"Default tools to cover: search-actors, fetch-actor-details, call-actor, get-actor-run, get-actor-output, search-apify-docs, fetch-apify-docs.
Native client (Claude Code, Cursor): server is already connected — call tools directly. Ask the user if unsure which approach to use.
- Unit tests:
npm run test:unit. - Integration tests:
npm run test:integration(needs build +APIFY_TOKEN, humans only). tests/integration/suite.tsis the main suite, reused by stdio/streamable-http transports. Add new integration cases there, NOT in separate files.- Follow existing test patterns (names, structure) — check neighboring files.
IMPORTANT: This package (@apify/actors-mcp-server) is used in the private apify-mcp-server-internal repository for the hosted server.
Changes here may affect that server.
Breaking changes must be coordinated; check whether updates are needed in apify-mcp-server-internal before submitting a PR.
- Public repo = core MCP server logic, interfaces, types (with generic/plain data types only)
- Internal repo = backend/DB/proprietary logic (Redis, MongoDB, IAM auth, multi-node)
- Never import private Apify libraries or internal DB schemas into the public repo — external users can't install them
- Expose methods on
ActorsMcpServer, not raw data exports via./internals— minimize the coupling surface - When designing a new feature, ask: can this land in one repo? Prefer exposing a method or interface over exporting internals that the other repo re-implements
- Validate tool inputs with Zod. No ad-hoc shape checks.
- Reference tool names via the
HelperToolsenum, not hardcoded strings (exception: integration tests). - Always follow the latest MCP spec and MCP Apps spec.
- CONTRIBUTING.md — coding standards, patterns, anti-patterns, commit format, PR guidelines, design system rules
- DEVELOPMENT.md — project structure, setup, build system, hot-reload workflow, manual MCP testing
- DESIGN_SYSTEM_AGENT_INSTRUCTIONS.md — UI widget design system rules (read this when doing any UI/widget work)
- res/ — ad-hoc notes: architecture analyses, refactor plans, protocol references. May be obsolete — verify against current code before trusting.