Metadata-Version: 2.4
Name: thingctx
Version: 0.1.2
Summary: Drive any agent against any W3C WoT Thing, over any transport. No per-integration server.
Author: The thingctx Authors
License: Apache-2.0
Project-URL: Homepage, https://thingctx.com
Project-URL: Repository, https://github.com/thingctx/thingctx
Keywords: llm,wot,web-of-things,thing-description,mcp,tool-calling,agents
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: License :: OSI Approved :: Apache Software License
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: NOTICE
Provides-Extra: llm
Requires-Dist: litellm>=1.0; extra == "llm"
Provides-Extra: http
Requires-Dist: httpx>=0.25; extra == "http"
Provides-Extra: mqtt
Requires-Dist: paho-mqtt>=2.0; extra == "mqtt"
Provides-Extra: validate
Requires-Dist: jsonschema>=4.0; extra == "validate"
Provides-Extra: mcp
Requires-Dist: mcp>=1.0; extra == "mcp"
Provides-Extra: all
Requires-Dist: litellm>=1.0; extra == "all"
Requires-Dist: httpx>=0.25; extra == "all"
Requires-Dist: paho-mqtt>=2.0; extra == "all"
Requires-Dist: jsonschema>=4.0; extra == "all"
Requires-Dist: mcp>=1.0; extra == "all"
Provides-Extra: dev
Requires-Dist: pytest>=7; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
Requires-Dist: jsonschema>=4.0; extra == "dev"
Requires-Dist: mcp>=1.0; extra == "dev"
Requires-Dist: httpx>=0.25; extra == "dev"
Requires-Dist: ruff>=0.6; extra == "dev"
Dynamic: license-file

# thingctx

Drive any agent against any W3C Web of Things Thing, over any transport.
The integration is a JSON Thing Description, not a server you run.

## Install

    pip install thingctx[all]
    # or pick extras: thingctx[llm] [http] [mqtt] [validate] [mcp]

## Use

```python
import thingctx

# Out-of-the-box agent loop
host = await thingctx.from_url("https://api.example.com/.well-known/wot")
print(await host.chat("what's the forecast for Cairo?"))
```

Own the loop? Get tool specs and route calls yourself:

```python
client = thingctx.ThingClient.from_registry(thingctx.from_arg("./registry/"))
specs, invoke = client.as_tools()
await invoke("pump.set_speed", {"rpm": 1500})
```

Closed agent (Claude Desktop, Copilot)? Bridge a registry of descriptions to MCP:

    thingctx-mcp ./registry/

## Docs and source

Full README, examples, and design notes: https://github.com/thingctx/thingctx

Apache-2.0
