genskill-mcp
An MCP server that lets any AI agent build on GenLayer: search the docs, inspect contracts and transactions over RPC, and scaffold, lint, and test Intelligent Contracts.
    
genskill-mcp is a Model Context Protocol server for MCP-compatible clients (Claude Code, Cursor, VS Code, Gemini CLI, Codex, and remote MCP clients over HTTP). It combines searchable GenLayer documentation, live protocol/RPC inspection of contracts and transactions, and a contract authoring toolkit (scaffold, lint, and test Intelligent Contracts), so an agent can go from zero to a deployable contract without leaving its editor.
This project does not sign transactions or manage private keys. It supports live node inspection and contract interaction through GenLayer JSON-RPC methods such as gen_call, gen_getContractState, gen_getContractCode, gen_getContractSchema, gen_getTransactionStatus, and gen_getTransactionReceipt.
Install
| Use | Command / URL | | --- | --- | | Local (stdio) | npx -y genskill-mcp | | Hosted (remote) | https://genskill-mcp.vercel.app/mcp |
Per-client setup (Claude Code, Cursor, VS Code, Gemini, Codex, remote) is in the quickstarts below.
What this server does
The server loads the official GenLayer docs bundle:
It parses that bundle into sections and exposes:
- searchable MCP tools
- a browsable docs index resource
- individual section resources
- live GenLayer JSON-RPC tools for contract and transaction inspection
- a browsable RPC configuration resource
- contract authoring tools: scaffold a starter contract and lint it before deploy
- guided MCP prompts for writing, testing, and debugging contracts
This repository supports two transports:
stdiofor local CLI tools such as Claude Code, Codex, Cursor, VS Code, and Gemini CLI- Streamable HTTP for deployed remote MCP usage
Build a contract (authoring tools, new in 2.2)
If you are new to GenLayer, this is the fast path from zero to a deployable contract. It does not just point you at docs, it gives you working code and checks it.
genlayer_scaffold_contractgenerates a working starter Intelligent
Contract for a template (storage, llm-judge, web-oracle, token). The output already has the runner header pinned and avoids the common GenVM deploy-killers, so it deploys as-is.
genlayer_lint_contractruns static pre-deploy checks on contract source.
It catches the mistakes that make a deploy finalize with a bare invalid_contract (no stack trace): a comment line directly under the runner header, an unpinned or :test / :latest runner, a missing gl.Contract class, forbidden sandbox imports (os, sys, subprocess, random, ...), and GenVM Python-subset issues such as for loops, sorted, .sort, lambda, and list / dict storage fields.
genlayer_scaffold_testgenerates a fast direct-mode test
(genlayer-test) for a template, using the real fixtures (direct_vm, direct_deploy, direct_alice) and mocking web/LLM calls so tests stay deterministic.
Three guided prompts wrap the workflow for any MCP client:
genlayer_write_contractscaffold, decide what needs consensus, then lint.genlayer_test_contractdirect-mode then integration testing.genlayer_debug_deploythe checklist for a deploy that errored on-chain.
And a single always-available resource, genlayer://guide/contract-rules, is an authoritative cheat sheet (skeleton, storage types, web/LLM/equivalence APIs, the GenVM Python-subset rules, and the deploy/finalize/debug checklist) that any connecting agent can read to get contract writing and debugging right. It tracks the latest GenLayer docs and the official write-contract / direct-tests skills.
Typical loop: scaffold, edit, genlayer_lint_contract until it is clean, deploy, then inspect it live with genlayer_get_contract_snapshot.
RPC configuration
Live protocol tools use the configured GenLayer RPC endpoint.
GENLAYER_RPC_URL: JSON-RPC endpoint to useGENLAYER_RPC_TIMEOUT_MS: timeout for live RPC requests
If GENLAYER_RPC_URL is not set, the server defaults to:
https://studio.genlayer.com/api
Quickstart for Claude Code
claude mcp add --transport stdio genskill -- npx -y genskill-mcp
Then start Claude Code:
claude
Inside Claude Code, run:
/mcp
The genskill server and its tool endpoints should be listed.
Quickstart for Cursor (per-project)
Add this to .cursor/mcp.json:
{
"mcpServers": {
"genskill": {
"command": "npx",
"args": ["-y", "genskill-mcp"]
}
}
}
[!TIP] If a Cursor version does not recognize
mcpServers, usemcp_serversas the top-level key instead.
Quickstart for VS Code (per-workspace)
Add this to .vscode/mcp.json:
{
"servers": {
"genskill": {
"type": "stdio",
"command": "npx",
"args": ["-y", "genskill-mcp"]
}
},
"inputs": []
}
Quickstart for Gemini CLI
Add the MCP server globally:
gemini mcp add --scope user genskill npx -y genskill-mcp
Confirm it is registered:
gemini mcp list
Quickstart for Codex
Add the MCP server with the Codex CLI:
codex mcp add genskill -- npx -y genskill-mcp
Confirm it is registered:
codex mcp list
Alternatively, add this to a Codex MCP config:
[mcp_servers.genskill]
command = "npx"
args = ["-y", "genskill-mcp"]
Restart Codex if needed so it reloads the MCP config.
Quickstart from source
For source-based usage instead of installing from npm:
- Clone the repo:
git clone https://github.com/Jr-kenny/genskill-mcp
cd genskill-mcp
- Install dependencies and build:
npm install
npm run build
- Run the local entrypoint:
node /absolute/path/to/genskill-mcp/dist/cli.js
Substitute that node .../dist/cli.js command in any MCP client config for source-based usage over npx.
Quickstart for remote MCP clients
Remote MCP clients can use the public HTTP endpoint without an account. Anonymous clients receive the stateless documentation, authoring, planning, and protocol tools. Persisted workflow sessions require an optional tenant bearer token.
This is not Claude-specific. It is the deployed transport for any client that can connect to remote MCP servers over Streamable HTTP, including chat-style AI apps where that capability is available.
- Deploy this repository to Vercel. No authentication configuration is required for public stateless access.
- To enable private workflow sessions for known tenants, configure credentials as a JSON object. Each key is a stable tenant ID and each value is a random bearer token containing at least 32 characters:
GENSKILL_MCP_TENANT_TOKENS='{"team-a":"replace-with-a-random-32-character-token"}'
Anonymous users never see workflow session tools or resources, even when tenant credentials are configured.
- The deployed MCP endpoint is:
https://genskill-mcp.vercel.app/mcp
- The deployed service also exposes:
GET /for a small server info responseGET /healthfor health checksPOST /mcpfor MCP Streamable HTTP requests
- Add the deployed MCP URL in any remote MCP client. Known tenants can optionally send their token to unlock their isolated workflow sessions:
Authorization: Bearer replace-with-a-random-32-character-token
Use:
https://genskill-mcp.vercel.app/mcp
This applies to Claude-hosted integrations, ChatGPT-style apps, and other remote AI clients where MCP server URLs are supported.
For local HTTP testing, run:
npm install
npm run build
npm run start:http
It listens on port 3000 by default. Set the PORT environment variable to change it.
HTTP workflow session tools are hidden from anonymous users. Authenticated sessions are stored in separate hashed directories for each tenant. Set GENSKILL_MCP_SESSION_DIR to choose the session root. Vercel defaults to temporary function storage, so use a durable tenant-aware backing store if sessions must survive instance recycling.
Local filesystem access is available only over the stdio transport. HTTP servers don’t register genlayer_load_contract_artifact, and all other HTTP tools reject contractPath. Remote clients can provide base64-encoded code or a deployed contract address.
Vercel deployment
This repository is configured for Vercel through vercel.json and the Web-standard API functions in api/.
Public MCP endpoint on Vercel:
https://genskill-mcp.vercel.app/mcp
Useful checks:
https://genskill-mcp.vercel.app/https://genskill-mcp.vercel.app/healthPOST https://genskill-mcp.vercel.app/mcpfrom an anonymous or authenticated MCP client
Notes:
/mcpis routed to the Vercel function at/api/mcp.mjs.- Anonymous
/mcprequests expose only stateless tools. A supplied bearer token must be valid, and invalid tokens return401. - The Vercel endpoint uses the MCP SDK Web-standard Streamable HTTP transport in stateless mode.
- POST requests return JSON responses where possible, which is friendlier for serverless hosting than holding long SSE streams open.
- If the docs update while the service is already deployed, call
genlayer_refresh_docsfrom an MCP client or redeploy the project.
Tool endpoints
High-level orchestration tools now use a canonical machine-readable response shape with:
kindsummarycurrent_stateblockersnext_actionsfallbacksdata
The autopilot and capability surfaces are capability-aware: they should prefer only actions supported by the currently configured endpoint and explicitly downgrade unsupported debug or ops paths into fallbacks.
Live protocol tools
genlayer_list_networks
Lists documented GenLayer network presets, chain IDs, and RPC URLs.
genlayer_start_workflow_session
Creates a persisted workflow session from a generated contract workflow plan.
genlayer_list_workflow_sessions
Lists persisted workflow sessions ordered by most recently updated.
genlayer_get_workflow_session
Reads a persisted workflow session by id.
genlayer_update_workflow_step
Marks a workflow session step as completed or pending.
genlayer_autopilot_brief
Generates a single operator-grade brief with endpoint capabilities, contract context, workflow plans, handoff steps, and relevant docs.
genlayer_load_contract_artifact
Loads a local contract artifact or bytecode file and returns base64 plus file metadata. This tool is exposed only over the local stdio transport.
genlayer_probe_endpoint_capabilities
Probes which HTTP and RPC surfaces are actually exposed on the configured GenLayer deployment.
genlayer_generate_agent_handoff
Generates an explicit ordered handoff bundle so weaker agents know exactly which genskill-mcp tools to call next.
genlayer_get_contract_interface
Normalizes a contract schema into constructor, view methods, and write methods.
genlayer_plan_contract_action
Builds a schema-validated execution plan for deploy, read, or write actions.
genlayer_plan_contract_workflow
Builds a multi-phase contract workflow covering deploy, wait, snapshot, interaction, and diagnosis.
genlayer_run_transaction_report
Orchestrates waiting, inspection, status explanation, optional trace lookup, and optional contract snapshot into one report.
genlayer_run_contract_report
Orchestrates network context, contract snapshot, interface, workflow, and default plans into one report.
genlayer_generate_typescript_workflow
Generates GenLayerJS deploy/read/write snippets from a contract schema or deployed contract.
genlayer_generate_contract_playbook
Generates a schema-aware deployment and interaction playbook for a contract.
genlayer_node_health
Calls the configured GenLayer node HTTP GET /health endpoint.
genlayer_network_status
Returns a combined live snapshot of node health, chain id, block height, sync status, and optional debug ping status.
genlayer_balance
Calls the configured GenLayer HTTP GET /balance endpoint for the node operator.
genlayer_eth_get_balance
Calls eth_getBalance through the configured GenLayer RPC endpoint.
genlayer_raw_rpc
Calls gen_, eth_, zks_, or zksync_ methods directly against the configured endpoint.
genlayer_trace_transaction
Calls gen_dbg_traceTransaction when the target node exposes debug methods.
genlayer_metrics
Fetches Prometheus-style metrics from the configured HTTP GET /metrics endpoint.
genlayer_submit_raw_transaction
Submits a signed raw transaction through eth_sendRawTransaction.
genlayer_inspect_transaction
Combines gen_getTransactionStatus, gen_getTransactionReceipt, and eth_getTransactionByHash into one response.
genlayer_wait_for_transaction
Polls transaction status until accepted or finalized.
genlayer_explain_transaction_status
Interprets transaction status into finality phase, appealability, and next-step guidance.
genlayer_call_contract
Executes gen_call for read, write-simulation, or deploy-simulation requests.
genlayer_get_contract_schema
Calls gen_getContractSchema for base64-encoded contract code.
genlayer_get_contract_state
Calls gen_getContractState for a deployed contract.
genlayer_get_contract_code
Calls gen_getContractCode for a deployed contract.
genlayer_get_contract_snapshot
Fetches state, deployed code, and derived schema in one call.
genlayer_get_transaction_status
Calls gen_getTransactionStatus for lightweight transaction polling.
genlayer_get_transaction_receipt
Calls gen_getTransactionReceipt for full processed transaction data.
genlayer_syncing
Calls gen_syncing on the configured endpoint.
Documentation tools
genlayer_search_docs
Searches the documentation bundle and returns ranked matches with snippets.
genlayer_refresh_docs
Force-refreshes the cached GenLayer documentation bundle from the configured source. Use this after the GenLayer team ships new docs, for example new Studio GEN, payable contract, Faucet, Tip Jar, or MetaMask updates.
genlayer_read_doc
Reads a section by slug, path, title, or fuzzy query.
genlayer_get_doc_by_slug
Reads a section by exact slug, path, docs URL, or resource URI.
genlayer_search_examples
Searches example-heavy sections that contain commands, code blocks, SDK snippets, or config examples.
genlayer_get_related_docs
Finds related documentation pages based on section path, title, and neighborhood in the docs tree.
genlayer_list_topics
Lists top-level GenLayer documentation topics with counts and example pages.
genlayer_list_sections
Lists available parsed documentation sections.
Resources
genlayer://protocol/networks
Documented GenLayer network presets, RPC URLs, and chain IDs.
genlayer://workflow/sessions
List of persisted workflow sessions. HTTP clients see only their authenticated tenant’s sessions.
genlayer://workflow/session/{id}
Persisted workflow session with step completion state, scoped to the authenticated HTTP tenant.
genlayer://workflow/autopilot
Single operator-grade brief for the configured endpoint and current contract context.
genlayer://protocol/rpc-config
JSON document showing the configured RPC endpoint, timeout, and supported helper methods.
genlayer://protocol/capabilities
Probed endpoint capabilities showing which HTTP and RPC surfaces are actually exposed.
genlayer://protocol/transaction/{txId}
Combined transaction inspection resource for a specific transaction hash.
genlayer://protocol/transaction/{txId}/report
Composed transaction report with status interpretation and optional trace data when exposed.
genlayer://protocol/contract/{address}/state
Current accepted-state snapshot for a specific deployed contract.
genlayer://protocol/contract/{address}/snapshot
Combined state, code, and schema snapshot for a specific deployed contract.
genlayer://protocol/contract/{address}/playbook
Schema-aware deployment and interaction playbook for a deployed contract.
genlayer://protocol/contract/{address}/report
Composed contract report with network context, snapshot, interface, workflow, and default plans.
genlayer://protocol/contract/{address}/plans
Default workflow plus default read/write action plans for a deployed contract.
genlayer://protocol/contract/{address}/method/{method}/plan/{action}
Default schema-validated plan for a specific read or write method.
genlayer://docs/index
JSON index of all parsed sections.
genlayer://docs/section/{slug}
Individual documentation sections as read-only resources.
Project structure
| File/Folder | Purpose | | --- | --- | | src/index.ts | The server logic: loads docs, parses sections, registers tools and resources | | src/cli.ts | Entry point that starts the stdio MCP server | | src/genlayerAuthoring.ts | Contract scaffolder + linter + test scaffolder (pure, unit-tested) | | src/authoringTools.ts | Registers the authoring tools and the dev-workflow prompts | | src/mcpResponses.ts | Shared canonical response envelope helpers | | src/genlayerDocs.ts | Docs loading, caching, parsing, search, and formatting helpers | | src/genlayerRpc.ts | GenLayer RPC, HTTP ops endpoints, network presets, and transaction helpers | | src/genlayerContractToolkit.ts | Schema normalization and GenLayerJS workflow/playbook generation | | src/genlayerArtifacts.ts | Local artifact loading and hashing for artifact-driven GenLayer workflows | | src/genlayerWorkflowSessions.ts | Persisted workflow session state and session formatting helpers | | api/ | Vercel API functions for the remote MCP, health, and root endpoints | | test/ | Unit tests for the authoring module (npm test, built-in node:test) | | dist/ | Compiled JavaScript output generated by npm run build | | package.json | Dependencies, scripts, package metadata, and CLI registration | | tsconfig.json | TypeScript compiler settings | | vercel.json | Vercel routing and function configuration | | README.md | Usage and client setup |
How it's built
This MCP server is a lightweight TypeScript implementation built on the official MCP SDK.
Core components
- Built on
@modelcontextprotocol/sdk - Uses
StdioServerTransportfor local MCP clients - Uses
zodto validate tool arguments - Fetches the GenLayer docs bundle from the official docs site
- Parses the bundle into section-level resources based on each
# path/to/file.mdxboundary - Uses a simple deterministic ranking function over titles, slugs, paths, and body text
Configuration
Optional environment variables:
GENLAYER_DOCS_URL: alternate source URL or local file path for the docs bundleGENLAYER_DOCS_CACHE_FILE: cache location for the downloaded bundleGENLAYER_DOCS_REFRESH_HOURS: cache freshness window in hours, default24GENLAYER_DOCS_TIMEOUT_MS: HTTP timeout in milliseconds, default15000
The server also refreshes stale in-memory snapshots automatically. For long-running HTTP deployments, call genlayer_refresh_docs when the GenLayer team ships new documentation and an immediate update is needed without restarting the service.
Local development
This section is only for working on the MCP server itself.
npm install
npm run build
npm run check
npm start
npm run check verifies that the server can fetch and parse the live GenLayer docs bundle.
Releasing (maintainers)
Releases are published to npm automatically by .github/workflows/release.yml when a v* tag is pushed. One-time setup: add an npm automation token as the NPM_TOKEN repository secret (gh secret set NPM_TOKEN).
To cut a release:
npm version minor # bumps package.json, commits, creates the tag vX.Y.Z
git push --follow-tags # pushes the commit + tag; CI builds, tests, publishes
The workflow checks the tag matches package.json, runs the tests, and publishes with npm provenance. Once published, consumers update with:
npx -y genskill-mcp@latest # always newest
npm update -g genskill-mcp # if installed globally
Remote (Vercel) users need no action — the hosted endpoint auto-deploys from main; clients pick up changes on reconnect.
Credits
Built and maintained by:











