Guides

Discover services

How agents find services by capability on the host.

Discovery is the primary job of ASMP. Agents should never grep the filesystem for ports.

By capability (preferred)

asmp find --capability email.classify

Or via HTTP:

curl "http://127.0.0.1:7700/capabilities?provides=email.classify"

Returns all services providing email.classify with health state. See CLI reference.

Via MCP

service_find(capability="email.classify")
service_find(query="email")

Searches name, description, and capability keywords.

List everything

asmp list
service_list()
curl http://127.0.0.1:7700/services

Filter by section:

curl "http://127.0.0.1:7700/services?section=tools"

Check health

service_health(name="director-daemon")
service_health()   # summary of all services

Wiring discovery into every session

Discovery only works if every agent session can reach the registry. Options:

Per-repo MCP config

Add the registry MCP server to .mcp.json:

{
  "mcpServers": {
    "asmp-registry": {
      "command": "python3",
      "args": ["/path/to/registry/mcp_server/server.py"]
    }
  }
}

Host-level config (goal)

A global MCP config or bootstrap snippet every session inherits — so discovery is ambient, not per-repo.

Scan for new shipped manifests

After cloning a repo or on session start:

asmp scan

Or MCP: service_scan()

When lookup misses — self-heal

If asmp find, asmp get, or service_find returns nothing but you know the service exists, drop a breadcrumb:

asmp todo <name> --note "what you observed" [--repo PATH] [--hint "how to register"]
asmp todos

MCP equivalent:

service_todo(name="...", note="...", repo="...")
service_todos()

This appends to ~/.asmp/discoveries.jsonl via POST /discoveries. It is not a registration — it flags that the service should be documented. A later pass authors asmp.yaml and runs asmp announce.

What to do with results

Once you find a service:

  1. Read its endpoints for the URL
  2. Check health status before calling
  3. Use MCP tools on that service (if it exposes MCP)
  4. Read repo for source code context
  5. Check data.sensitivity before sending sensitive input