Drive devices and APIs from their W3C Thing Description. You gate every operation.
MCPpedia last refreshed this data
com.thingctx/thingctx is an MCP server that drive devices and APIs from their W3C Thing Description. You gate every operation. Its tool list has not been published yet over stdio and sse, requires no API key, and scores 88/100 on MCPpedia's security, maintenance and efficiency rubric.
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"com-thingctx-thingctx": {
"args": [
"thingctx"
],
"command": "uvx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
thingctx turns a description of any API, device, or local process into tools an AI agent can call: authorized per operation, over the system's own transport, and the agent never holds your keys. The description is a W3C Web of Things Thing Description (a TD), a plain JSON file naming what the system can do. Write one, or compile it from an OpenAPI spec. The described system is the server, so you run no server
Run this in your terminal to verify the server starts. Then let us know if it worked — your result helps other developers.
uvx 'thingctx' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
Checked thingctx against OSV.dev.
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in other
Compress tool outputs, logs, files, and RAG chunks before they reach the LLM. 60-95% fewer tokens, same answers. Library, proxy, MCP server.
Transport for TMCP using STDIO
The graph based agentic IDE
Buddhist canon tools: search, passages, cross-canon parallels, dictionaries — all URN-cited.
MCP Security Weekly
Get CVE alerts and security updates for com.thingctx/thingctx and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.

thingctx turns a description of any API, device, or local process into tools an AI agent can call: authorized per operation, over the system's own transport, and the agent never holds your keys. The description is a W3C Web of Things Thing Description (a TD), a plain JSON file naming what the system can do. Write one, or compile it from an OpenAPI spec. The described system is the server, so you run no server per integration.
A "Thing" is whatever you want to describe: a REST API, an app, a sensor, a
media server, a local object, or one system that is several of those at
once. A media server takes commands over HTTP and serves its stream over
RTSP. The pump in examples/ reads over MQTT and acts through
a local call. Each is one Thing and one description.
A description names actions, properties, and events, and gives each one
a form: the entry that says where and how to reach it. The URL scheme in that
address picks the transport per call, so however many protocols one Thing
spans, the agent still sees one tool set.
docs/BINDINGS.md covers the transports and how to add
your own. A subprocess transport, exec, also ships, and it ships locked:
it refuses every command until you hand it an explicit allowlist.
Those three stay distinct all the way to the call. A read, a write, and a subscribe do not collapse into one undifferentiated function, which is why the gate can allow the read and refuse the write on the same system. A flat list of functions has no such handle.
Pick your path: use it as a library if you own the agent loop, the command line if you do not want to write code, the MCP bridge if your host only speaks MCP, or add a transport if thingctx does not speak your protocol yet.
Stuck, or wondering whether something is possible? Ask in Discussions. Want to build something small? The open issues say what would help.
One paste shows the whole idea. The description is inline and the handler ships with the package, so nothing here needs a key, a network, or a second file:
pip install thingctx
import asyncio
import thingctx
from thingctx.contrib.time import make_time_handler
TD = {
"@context": "https://www.w3.org/2022/wot/td/v1.1",
"id": "urn:thingctx:time",
"title": "Time",
"securityDefinitions": {"nosec_sc": {"scheme": "nosec"}},
"security": ["nosec_sc"],
"actions": {
"getCurrentTime": {
"description": "Current time in an IANA timezone (default UTC).",
"input": {
"type": "object",
"properties": {"timezone": {"type": "string"}},
},
"safe": True,
"idempotent": True,
"forms": [{"href": "local://getCurrentTime"}],
}
},
}
async def main():
client = thingctx.ThingClient(tds=[TD], bindings=[thingctx.LocalBinding(make_time_handler())])
tools, invoke = client.as_tools() # specs for your model; invoke runs a call
print("tools:", [t["function"]["name"] for t in tools])
print(await invoke("time__getCurrentTime", {"
... [View full README on GitHub](https://github.com/thingctx/thingctx#readme)