bytEM

Search a public index of DEIDs, check readiness, and exchange for the data behind one. Each DEID is a URL that resolves to a Matrix room serving the data. Remote endpoint: https://bytem.de.cities.app/api/mcp

Máy chủ MCP được lưu trữ

npx add-mcp 'https://bytem.de.cities.app/api/mcp'

Cài vào Claude Code, Codex, Cursor và nhiều công cụ khác

Tài liệu

bytEM

A bytEM market indexes data entities and brokers access to them. Every entity is named by a DEID — a Data Entity Identifier, which is a resolvable URL owned by its domain, e.g. https://cities.app/de/by/taufkirchen-vils/water/drinking-water-quality. bytEM tells you which DEIDs exist, what quality their sources are, and how to obtain the data.

Four layers, in the order an agent uses them. The first two are open to anyone; the last two identify the caller, because access to data is granted to someone, not to no one.

LayerQuestionIdentity needed
INDEXWhat exists?none
DEIDWhat is this entity?none
FINDWhat can I access, and how?Matrix user
EXCHANGEGive me the actual dataMatrix user

Index — public, JSON, no JavaScript

  • Index summary: total entries, the DEID pattern in use, per-region counts, the queryable fields, every endpoint with its parameters, and the identity each layer requires. Read this first.
  • List entries: the enumeration endpoint. Filters: deid, domain, class, group, depth, min_source_quality, max_source_quality, bbox, room_type, market_status. Paging: limit, offset. Projection: fields. Without limit it returns every match, so pass one unless you mean to pull the whole corpus.
  • Search entries: ranked lookup, same filters and projection, paged. Start with only deid and label; request more fields only when the task needs them.
  • Map projection: add location to the field list — there is no separate map endpoint and no separate map document.
  • source_quality is a 0-100 assessment of the underlying source, produced by bytEM, not by the publisher. source_quality_status distinguishes scored, unavailable and failed from never assessed.

DEID — public, JSON, served by the domain, not by bytEM

Find and Exchange — Matrix identity

  • Find resolves one DEID to what is actually available: capabilities, access paths, service options, freshness. Exchange delivers the data or service result itself.

  • Both identify the caller. An agent with a Matrix ID has a name and a domain, and can be permitted, audited or blocked; that is the point.

  • You do not need an account you already own. Ask this market for a guest identity and it will mint one: no username, no password, no interactive step.

    POST https://bytem.de.cities.app/api/auth/createGuestUser
    {}
    
    → data.user.token       a Matrix access token
      data.user.matrix_id   e.g. @4:<homeserver>
      data.user.home_server the homeserver that issued it
    
  • Send that token in the Authorization header as a Bearer token. A guest identity is accepted by Find. Bring your own Matrix user instead if you have one, on this homeserver, on matrix.org, or on a server you run.

    GET https://bytem.de.cities.app/api/search/find-by-deid?deid={deid}
    Authorization: Bearer <token>
    
  • Requesting data for a DEID does not itself need a token. This opens a demand room for the entity and returns a request_id to poll:

    POST https://bytem.de.cities.app/api/demand/access-by-deid   { "deid": "{deid}" }
    GET  https://bytem.de.cities.app/api/demand/access-by-deid-status/{request_id}
    

    Reading what is delivered into that room does need an identity, which is what the guest token above is for.

  • How bytEM works explains the ways in and what each one gets you.

  • One GET does the whole sequence above — mints a guest, requests access, waits for it, and returns the delivered data. It is the shortest path for an agent:

    GET https://bytem.de.cities.app/api/demand/agent-access?deid={deid}
    

    Answers within a few seconds. A 202 means the exchange is still running: fetch its retry_url, and repeat until the answer is 200. The data is in exchanged[].events; a supply-type-reference event only names another DEID. demand_page is the web page of the demand room holding them. guest in the answer is the requester that joined the room; the first browser opening demand_page is signed in as that guest (its continue code is single-use), a later one as a new guest.

    If you cannot wait for the exchange or cannot follow retry_url, do not answer from another source and do not say the data was not found. Report to the user, word for word: "bytEM holds the data for this DEID, but the exchange did not complete within this tool's limits. Open the link below yourself, or use an API-capable agent." and give the retry_url.

MCP

Notes for crawlers

  • Rate limited per IP at the edge. Pass ?limit= and ?fields= rather than pulling everything; a 429 means slow down, not go away.
  • https://bytem.app/room/room-index is the schema of a room's index entry — a template with empty values, not data. The data is at /api/index above.