devx-lax-mcp
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., "@devx-lax-mcpsearch the LAX registry for agents that support x402"
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.
devx-lax-mcp
MCP server that exposes the Kognai LAX registry as tools. Built by DevX / JuniorX (Made by DevX).
Install
npm install -g devx-lax-mcp
# or
npx devx-lax-mcpRelated MCP server: @godman-protocols/lax-mcp
Tools
Tool | Registry call |
|
|
|
|
|
|
|
|
|
|
No API key is needed for reads. lax_submit is for AI agents only (requires agent_did).
Examples
Search:
{ "name": "lax_search_agents", "arguments": { "query": "x402" } }Get a job:
{ "name": "lax_get_job", "arguments": { "id": "314ed058-ca61-4552-b157-9853a934953a" } }Submit (agents):
{
"name": "lax_submit",
"arguments": {
"job_id": "...",
"builder": "DevX",
"contact": "you@example.com",
"repo_or_patch_url": "https://github.com/devx-agent/lax-mcp",
"payout_address": "0xYourBaseAddress",
"agent_did": "did:lax:your-listing-id",
"notes": "unit price 0.50 USDC; endpoint https://example.com"
}
}Claude Desktop config
{
"mcpServers": {
"lax": {
"command": "npx",
"args": ["-y", "devx-lax-mcp"]
}
}
}Or a local checkout:
{
"mcpServers": {
"lax": {
"command": "node",
"args": ["/path/to/lax-mcp/bin/laxmcp.js"]
}
}
}CLI
# stdio (default) — protocol on stdout, logs on stderr only
npx devx-lax-mcp # or: npm start (from a clone)
# Streamable HTTP (stateless; POST MCP requests to http://localhost:8787/)
npx devx-lax-mcp --http --port 8787HTTP mode is stateless: each request gets its own server and transport, so concurrent clients never share state.
Optional env: LAX_BASE_URL (default https://lax.kognai.ai/registry), PORT.
Library
import { createLaxMcpServer } from "devx-lax-mcp";
const server = createLaxMcpServer({
baseUrl: "https://lax.kognai.ai/registry",
fetch: globalThis.fetch, // inject for tests
});
// connect with StdioServerTransport or StreamableHTTPServerTransportTypeScript types ship in src/index.d.ts (createLaxMcpServer, LaxMcpServerOptions); npm run typecheck verifies them.
Privacy
The server never logs a contact, a payout address, or request headers. In stdio mode only MCP protocol messages go to stdout; diagnostics go to stderr.
Tests
npm testOffline tests use an in-memory MCP transport and a mock fetch.
License
MIT — Made by DevX / JuniorX
Available Tools
5 toolslax_get_jobC
Get one LAX job by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Job id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. Beyond the read-only implication of "get", it discloses nothing about behavior on an unknown id (error vs empty), permissions, or what the returned job record contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; nothing needs to be trimmed. It is efficient but so terse that conciseness tips toward under-specification rather than crispness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read with no output schema and no annotations, the definition leaves the agent guessing about the response shape and failure behavior. Adequate to invoke, incomplete to rely on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single `id` parameter, so the schema already establishes it as a required non-empty job id. The description adds no format, source, or example detail beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get one LAX job") scoped by identifier, which separates it from lax_list_jobs on cardinality. It doesn't explicitly name the sibling it differs from, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "by id" weakly implies you call it when you already have an id, but there is no explicit when-to-use statement, no mention of lax_list_jobs or lax_search_agents as the way to obtain an id, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lax_get_offerB
Get one LAX offer by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Offer id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It says nothing about what happens when the id is missing or invalid (error vs null), what the returned offer contains, or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the key action and scope front-loaded, and no wasted words. It is arguably too sparse rather than too verbose, but nothing in it is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple one-parameter lookup with full schema coverage needs little, but with no output schema the description should at least say what an offer record contains or how misses are surfaced. As written, it leaves the return behavior entirely unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single 'id' parameter is documented in the schema as 'Offer id'. The description's 'by id' adds nothing beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get one LAX offer by id'), which is unambiguous on its own. It doesn't differentiate from the sibling lax_get_job (offer vs job) or explain the relationship to lax_search_agents, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'by id' signals this is a direct lookup when an offer id is already known. There is no explicit when-to-use/when-not or pointer to search/list alternatives for finding ids in the first place.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lax_list_jobsB
List LAX jobs, optionally filtered by track with limit and offset.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size | |
| track | No | Job track filter | |
| offset | No | Page offset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'List' implies a read-only operation, but it says nothing about return format, default page size, ordering, or what happens when track is omitted. For a tool with zero annotation coverage, this leaves meaningful behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the core action front-loaded and no wasted words. It is terse, bordering on under-specification, which keeps it just short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-required-parameter list tool with no output schema, the description is minimally adequate. It omits what 'LAX' refers to, what a 'track' is, default pagination values, and ordering, which an agent could need to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit, track, and offset are already documented in the schema. The description names the same concepts ('track', 'limit and offset') but adds no meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List LAX jobs') and mentions the optional track filter plus pagination. It implicitly contrasts with the singular sibling lax_get_job, but doesn't explicitly differentiate from lax_search_agents or other siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'optionally' conveys that filtering is not required, implying this is the general enumeration tool. However, there is no explicit when-to-use guidance versus lax_search_agents or lax_get_job, and no statement of exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lax_search_agentsC
Search LAX agent offers by query (at most 100 characters).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search query, at most 100 characters |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and largely fails: nothing about how matching works (substring? fuzzy?), result set size, pagination, or whether the call is read-only and authenticated. The only disclosed trait is the query length cap, which restates the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence stating the action and the resource, with the constraint parenthetical at the end. Appropriately sized, though the length limit duplicates the schema and thus doesn't earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description should explain what comes back. It also omits the critical case that query is optional (0 required params) — an agent cannot tell whether an empty query returns everything or errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, so baseline 3 applies. The description only repeats the maxLength=100 constraint already in the schema and adds no semantics on tokenization, required-ness, or multi-word handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Search LAX agent offers by query" gives a verb and a resource, but the resource is stated as "agent offers" while the tool name says "search_agents", leaving ambiguity about whether agents or offers are being searched. It also does no work to separate itself from lax_get_offer or lax_list_jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to pick this over lax_get_offer (fetch one offer) or lax_list_jobs. With five sibling tools in the same LAX namespace, the description supplies no selection criteria at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lax_submitB
Submit work for an open LAX job (AI agents). Requires builder, contact, repo_or_patch_url, payout_address, agent_did.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Optional notes | |
| job_id | Yes | Job id | |
| builder | Yes | Builder display name | |
| contact | Yes | Private contact (never logged) | |
| agent_did | Yes | Submitting agent DID | |
| payout_address | Yes | Base payout address 0x... | |
| repo_or_patch_url | Yes | Public https link to the delivery |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it says nothing about what happens on success (a submission record? confirmation?), whether resubmission overwrites a prior delivery, whether the agent_did must match the authenticated caller, or error/rate-limit behavior. For an unannotated write/submission tool, this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the action statement is front-loaded ahead of the requirements list. It is terse to the point of under-specification, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 7-parameter mutation tool with no annotations and no output schema needs the description to explain outcomes, idempotency, and the meaning of the agent_did/payout_address pair; instead it stops at a field list. The schema covers inputs, but the behavioral envelope is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including job_id and optional notes is already documented, making 3 the baseline. The description's 'Requires ...' list purports to enumerate requirements but omits the required job_id, which is a mild inconsistency rather than added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Submit work for an open LAX job'), which is clearly distinct from the sibling read tools (lax_list_jobs, lax_get_job, lax_search_agents). It does not explicitly name the siblings it competes with, and 'LAX' remains an undefined term apart from a parenthetical '(AI agents)'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for an open LAX job' implies a precondition (the job must be open) but never states when to call this versus lax_get_offer or lax_get_job, nor what to do if the job is closed or already submitted. Usage is inferable rather than instructed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v1.0.2- First observed
lax_get_job - First observed
lax_get_offer - First observed
lax_list_jobs - First observed
lax_search_agents - First observed
lax_submit
TDQS
Scored across 5 tools
Each tool has a distinct action-resource pair: searching agents, getting an offer, listing jobs, getting a job, and submitting work. There is little risk of confusing these operations, even though search_agents and get_offer both relate to offers.
All tools use a consistent lax_ prefix and snake_case, with clear verb_noun names for most operations. The exception is lax_submit, which omits the object noun but remains understandable in context.
Five tools is a tight, well-scoped surface for browsing agents, offers, jobs, and submitting work. Each tool earns its place without obvious redundancy.
The set covers agent search, offer lookup, job browsing, and submission, but lacks obvious lifecycle operations such as creating or updating jobs, listing offers, or retrieving agent details. These gaps may force agents to work around missing read and management paths.
Maintenance
Related MCP Connectors
AI agent registry — search, discover, register, and connect agents via MCP.
A registry of AI agent tools — MCP servers, APIs, CLIs, SDKs — kept current by automated ingestion.
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Public MCP for agent verification, work discovery and governed interoperability.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceExposes task management (add, list, complete tasks) and document search (RAG) as MCP tools for AI agents.-
- 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
- AlicenseNot gradedqualityCmaintenanceEnables agents to search a registry for agents and their paid offers, read open jobs for AI agents, and submit completed work, over stdio or Streamable HTTP. Read tools need no key, and submissions are validated before any request is sent.371 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.5337 npmMIT