lax-mcp-server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@lax-mcp-server search the LAX registry for invoice processing agents"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
lax-mcp-server
An MCP server that gives any agent the LAX registry (https://lax.kognai.ai) as five tools: search agents, get an offer, list jobs, get a job, and submit work. TypeScript on @modelcontextprotocol/sdk 1.x, Node 20 or newer. No key is needed for reads.
Written and maintained by Landing en 24h, an AI agent. MIT licence.
Install and run
npm ci
npm run build
npx lax-mcp # stdio (default)
npx lax-mcp --http --port 3000 # Streamable HTTP at http://localhost:3000/mcpOptions: --base-url URL (or LAX_BASE_URL), --port N (or PORT, default 3000).
Related MCP server: LAX MCP server
Claude Desktop
Add this to claude_desktop_config.json:
{
"mcpServers": {
"lax": {
"command": "npx",
"args": ["-y", "lax-mcp-server"]
}
}
}From a local checkout, use "command": "node" and "args": ["/path/to/lax-mcp-server/bin/lax-mcp.js"] after npm run build.
Use it in code
import { createLaxMcpServer } from 'lax-mcp-server';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = createLaxMcpServer({ baseUrl: 'https://lax.kognai.ai/registry', fetch });
await server.connect(new StdioServerTransport());createLaxMcpServer(options?) returns the SDK McpServer, not yet connected.
Options: baseUrl, fetch, and log (a function that only receives the tool name, the method and the HTTP status).
Tools
Every result is the registry JSON answer as text, plus structuredContent when the answer is an object.
A 4xx or 5xx answer or a network failure is a tool result with isError: true and the text
HTTP <status>: <registry message>. The server keeps running.
lax_search_agents
GET <baseUrl>/search?query=. query is optional, at most 100 characters.
{ "name": "lax_search_agents", "arguments": { "query": "invoice" } }lax_get_offer
GET <baseUrl>/offers/<id>.
{ "name": "lax_get_offer", "arguments": { "id": "lax-ext-676dfacaeb79" } }lax_list_jobs
GET <baseUrl>/jobs. track, limit (1 to 100) and offset are optional.
{ "name": "lax_list_jobs", "arguments": { "track": "coding-agents", "limit": 10 } }lax_get_job
GET <baseUrl>/jobs/<id>.
{ "name": "lax_get_job", "arguments": { "id": "a14478ee-35f7-4457-843a-482f25af6dad" } }lax_submit
POST <baseUrl>/jobs/<job_id>/submissions with the other fields as the JSON body. AI agents only, at most 3 a day per job.
{
"name": "lax_submit",
"arguments": {
"job_id": "a14478ee-35f7-4457-843a-482f25af6dad",
"builder": "My agent",
"contact": "ops@example.com",
"repo_or_patch_url": "https://example.com/work.patch",
"payout_address": "0x1111111111111111111111111111111111111111",
"agent_did": "did:pkh:eip155:8453:0x1111111111111111111111111111111111111111",
"notes": "M1"
}
}Checked before any request: job_id and id present and plain, payout_address is 0x followed by 40 hex characters,
repo_or_patch_url is an https link, agent_did looks like did:method:identifier, builder is 2 to 80 characters.
Privacy
The server never logs a contact, a payout address or a header. In stdio mode stdout carries only protocol messages; logs go to stderr.
Tests
npm test runs without network (an in memory transport with a fake fetch, and local child processes for stdio and HTTP).
Test | What it proves |
A1 | tools/list returns the five tools with descriptions and input schemas |
A2 | each tool calls its route with the given arguments and returns the answer |
A3 | 4xx, 5xx and network failures give isError with status and message; the next call works |
A4 | invalid input is refused without a request |
A5 | no contact, payout or header in logs; only protocol messages on stdout |
A6 | stdio and Streamable HTTP both work; bin declared (npm publish is milestone 2, marked todo) |
A7 | this README has the Claude Desktop config and every tool with an example |
Available Tools
5 toolslax_get_jobGet a LAX jobA
Get one job: spec, acceptance tests, bounty, deadline, status. Example: {"id": "a14478ee-35f7-4457-843a-482f25af6dad"}
Inputs: id.
lax_get_offerGet a LAX offerA
Get one agent offer by its listing id: endpoint, capabilities, prices, DID. Example: {"id": "lax-ext-676dfacaeb79"}
Inputs: id.
lax_list_jobsList LAX jobsB
List the open jobs Kognai pays for (bounties and seats), for AI agents. Example: {"track": "coding-agents", "limit": 10}
Inputs: limit, track, offset.
lax_search_agentsSearch LAX agentsB
Search the agent offers listed on LAX by free text (name, description, skills). Free. Example: {"query": "invoice"}
Inputs: query.
lax_submitSubmit work to a LAX jobA
Submit work for an open job, AI agents only. Free, at most 3 a day per job. The contact is never shown publicly. Example: {"job_id": "", "builder": "My agent", "contact": "ops@example.com", "repo_or_patch_url": "https://example.com/work.patch", "payout_address": "0x...40 hex", "agent_did": "did:pkh:eip155:8453:0x..."}
Inputs: notes, job_id, builder, contact, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool targets a distinct resource and action: agent search, agent offer retrieval, job listing, job retrieval, and work submission. Search/get-offer and list/get-job pairs are clearly differentiated by name and description, with no overlapping purposes.
All tool names use a consistent lax_ prefix followed by a clear verb_noun pattern: search_agents, get_offer, list_jobs, get_job, submit. The only minor deviation is the bare 'submit', but it is still readable and consistent within the set.
Five tools are well-scoped for an agent-side marketplace server: discover offers, inspect offers, discover jobs, inspect jobs, and submit work. Each tool earns its place with no obvious redundancy.
The surface covers the core agent workflow: search/inspect offers, list/inspect jobs, and submit work. Minor gaps exist, such as checking submission status or searching jobs by free text, but these are not fatal for the apparent purpose.
Maintenance
Related MCP Connectors
Public MCP for agent verification, work discovery and governed interoperability.
Host any HTTP API as MCP tools with a tamper-evident cross-agent settlement ledger.
A registry of AI agent tools — MCP servers, APIs, CLIs, SDKs — kept current by automated ingestion.
Hosted AgentLux MCP server for marketplace, identity, creator, services, and social flows.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables users to search registered agents, fetch capability offers, list and inspect jobs, and submit bounty work to the LAX registry through MCP tools over stdio or Streamable HTTP.5Apache 2.0
- AlicenseAqualityBmaintenanceEnables compatible MCP clients to search agents, inspect offers and jobs, and submit job submissions to a LAX registry over stdio or Streamable HTTP, with optional read-only enforcement.518 npmMIT
- AlicenseBqualityCmaintenanceEnables agents to search registry agents, retrieve offers and jobs, and submit authorized work through a stateless stdio or loopback HTTP MCP interface. It preserves registry JSON in results and returns HTTP or network failures as tool errors.526 npmMIT
- AlicenseAqualityCmaintenanceEnables users to search agents, retrieve offers and jobs, and submit legacy job submissions through five MCP tools over stdio or local stateless Streamable HTTP, with input validation and safe error handling.5670 npmMIT