{
    "name": "ifuri-connect",
    "description": "ifURI connector hub: URI routes for DNS, files, LLM, devices, processes and more — installable as urirun registries and projectable to MCP tools.",
    "url": "https://connect.ifuri.com",
    "version": "0.1.0",
    "provider": {
        "organization": "if-uri",
        "url": "https://ifuri.com"
    },
    "capabilities": {
        "streaming": false,
        "pushNotifications": false,
        "stateTransitionHistory": false
    },
    "defaultInputModes": [
        "application/json"
    ],
    "defaultOutputModes": [
        "application/json"
    ],
    "skills": [
        {
            "id": "planfile",
            "name": "Planfile Tasks",
            "description": "Plan, group and execute daily tasks through task:// and planfile:// URI commands.",
            "tags": [
                "task",
                "planfile",
                "tasks",
                "todo",
                "sprint",
                "LLM workflow"
            ],
            "examples": [
                "task://host/tickets/query/list",
                "task://host/ticket/query/next",
                "task://host/ticket/query/show",
                "task://host/ticket/command/create",
                "task://host/ticket/command/start",
                "task://host/ticket/command/complete",
                "task://host/ticket/command/fail",
                "task://host/ticket/command/block",
                "task://host/ticket/command/ready",
                "planfile://host/dsl/command/run"
            ]
        },
        {
            "id": "sqlite-context",
            "name": "SQLite Context Store",
            "description": "Local data, artifacts, checks and logs over data://, artifact://, check:// and log://.",
            "tags": [
                "data",
                "artifact",
                "check",
                "log",
                "sqlite",
                "context",
                "logs",
                "artifacts",
                "memory"
            ],
            "examples": [
                "data://host/datasets/query/list",
                "data://host/dataset/command/create",
                "data://host/record/command/upsert",
                "data://host/records/query/search",
                "data://host/sql/query/read-only",
                "artifact://host/artifact/command/register",
                "artifact://host/artifacts/query/list",
                "check://host/check/command/add",
                "check://host/checks/query/recent",
                "log://host/daily/command/write",
                "log://host/logs/query/recent"
            ]
        },
        {
            "id": "domain-monitor",
            "name": "Domain Monitor",
            "description": "HTTP, DNS reads, screenshots, logs and daily domain checks through URI commands.",
            "tags": [
                "monitor",
                "browser",
                "flow",
                "log",
                "domain",
                "monitoring",
                "DNS",
                "HTTP",
                "operations"
            ],
            "examples": [
                "monitor://host/http/query/status",
                "monitor://host/dns/query/current",
                "monitor://host/dns/query/expected",
                "browser://host/page/command/screenshot",
                "log://host/daily/command/write",
                "log://host/logs/query/recent",
                "flow://host/domain/command/check",
                "flow://host/daily/command/run"
            ]
        },
        {
            "id": "http-check",
            "name": "HTTP Check",
            "description": "Check HTTP endpoints through httpcheck:// URI commands and a small Python CLI.",
            "tags": [
                "httpcheck",
                "http",
                "status",
                "monitoring",
                "smoke test",
                "connector"
            ],
            "examples": [
                "httpcheck://host/http/query/status"
            ]
        },
        {
            "id": "time-tools",
            "name": "Time Tools",
            "description": "Expose current time and timezone checks through time:// URI commands.",
            "tags": [
                "time",
                "timezone",
                "clock",
                "workflow",
                "connector"
            ],
            "examples": [
                "time://host/clock/query/now"
            ]
        },
        {
            "id": "namecheap-dns",
            "name": "Namecheap DNS",
            "description": "Safe DNS query, plan, backup and apply flow for Namecheap host records.",
            "tags": [
                "dns",
                "Namecheap",
                "DNS",
                "records",
                "domain",
                "API"
            ],
            "examples": [
                "dns://host/records/query/current",
                "dns://host/records/query/expected",
                "dns://host/records/command/plan",
                "dns://host/records/command/backup",
                "dns://host/records/command/apply"
            ]
        },
        {
            "id": "grpc-transport",
            "name": "gRPC Transport",
            "description": "Expose and call URI registries over gRPC for service-to-service communication.",
            "tags": [
                "transport",
                "gRPC",
                "service",
                "registry",
                "runtime"
            ],
            "examples": [
                "transport://grpc/service/command/serve"
            ]
        },
        {
            "id": "mqtt",
            "name": "MQTT Device Bridge",
            "description": "Publish, subscribe and bridge firmware/backend/frontend device commands through MQTT URI routes.",
            "tags": [
                "mqtt",
                "device",
                "MQTT",
                "firmware",
                "IoT",
                "telemetry"
            ],
            "examples": [
                "mqtt://broker/topic/command/publish",
                "device://device-01/led/command/set"
            ]
        },
        {
            "id": "browser-control",
            "name": "Browser Control",
            "description": "Drive browser/noVNC actions through browser:// URI commands for demos and QA.",
            "tags": [
                "browser",
                "screenshot",
                "QA",
                "noVNC",
                "automation"
            ],
            "examples": [
                "browser://desktop/page/command/open",
                "browser://desktop/page/command/screenshot"
            ]
        },
        {
            "id": "base64",
            "name": "Base64 (PHP)",
            "description": "Encode and decode text with Base64 through codec:// URI commands.",
            "tags": [
                "codec",
                "base64",
                "php",
                "polyglot",
                "connector"
            ],
            "examples": [
                "codec://host/text/query/base64"
            ]
        },
        {
            "id": "camera",
            "name": "Camera capture + OCR",
            "description": "Turn a USB/built-in webcam into data over camera:// URIs: discover cameras, beep before scan, capture a still frame, describe what is in the photo, find and crop to the dominant object, OCR it, and run simple inspection/alert rules. Capture uses ffmpeg (OpenCV optional); scene understanding + object detection reuse the img2nl engine via urirun-connector-ocr (Pillow edge/stats fallback); OCR uses tesseract, upgrading to the richer OCR connector backends automatically.",
            "tags": [
                "camera",
                "webcam",
                "capture",
                "photo",
                "ocr",
                "tesseract",
                "ffmpeg",
                "object-detection",
                "scene-description",
                "img2nl",
                "crop",
                "v4l2",
                "usb",
                "beep",
                "inspection",
                "alert",
                "motion-detection",
                "change-detection",
                "audit"
            ],
            "examples": [
                "camera://host/devices/query/list",
                "camera://host/photo/command/capture",
                "camera://host/photo/query/describe",
                "camera://host/photo/query/analyze",
                "camera://host/photo/query/inspect",
                "camera://host/photo/query/compare",
                "camera://host/photo/query/barcodes",
                "camera://host/photo/query/ocr"
            ]
        },
        {
            "id": "chat",
            "name": "Chat Bridge",
            "description": "Deprecated chat bridge — map transcript to URI and forward to urisys RDP stack.",
            "tags": [
                "chat",
                "chat bridge",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "chat://local/message/command/send",
                "chat://local/uri/command/execute"
            ]
        },
        {
            "id": "doc",
            "name": "Document text / OCR",
            "description": "Extract text from PDFs and images over doc:// URIs. Text-layer PDFs use pdftotext; scans/images fall back through an OCR chain (tesseract, RapidOCR/ONNX from wronai-img2nl, or an Ollama vision model from wronai-ocr). Degrades gracefully to pdftotext-only.",
            "tags": [
                "doc",
                "ocr",
                "pdf",
                "pdftotext",
                "rapidocr",
                "tesseract",
                "invoice",
                "document",
                "text"
            ],
            "examples": [
                "doc://host/file/query/text",
                "doc://host/file/query/ocr",
                "doc://host/engine/query/list"
            ]
        },
        {
            "id": "email",
            "name": "Email",
            "description": "Read inbox, send mail, and extract local Thunderbird invoice attachments through email:// URI routes (IMAP + SMTP + local mbox).",
            "tags": [
                "email",
                "imap",
                "smtp",
                "thunderbird",
                "invoice",
                "mbox",
                "communication",
                "connector"
            ],
            "examples": [
                "email://host/inbox/query/list",
                "email://host/message/query/read",
                "email://host/message/command/send",
                "email://host/local/thunderbird/query/extract_invoices"
            ]
        },
        {
            "id": "env",
            "name": "Environment",
            "description": "Controlled env:// runtime configuration and secrets.",
            "tags": [
                "env",
                "environment",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "env://runtime/query/health",
                "env://runtime/query/list",
                "env://runtime/config/query/startup",
                "env://runtime/var/name/query/exists",
                "env://runtime/var/name/query/value",
                "env://runtime/secret/name/query/masked",
                "env://runtime/secret/name/query/value",
                "env://runtime/var/name/command/set",
                "env://runtime/var/name/command/unset"
            ]
        },
        {
            "id": "flow-repair",
            "name": "Flow Repair",
            "description": "Generate a urirun flow (YAML) from natural language, execute it, and self-repair from failures via an LLM.",
            "tags": [
                "flow",
                "llm",
                "ai",
                "yaml",
                "repair",
                "agent",
                "connector"
            ],
            "examples": [
                "flow://host/repair/command/run"
            ]
        },
        {
            "id": "fs",
            "name": "Filesystem duplicates",
            "description": "Find duplicate files in any folder over fs:// URIs. Exact byte duplicates by SHA-256 (stdlib) and near-duplicate IMAGES by perceptual hash (reusing wronai-img2nl analyze_fingerprint). A move command quarantines extras into _duplicates/, keeping the first of each group.",
            "tags": [
                "fs",
                "duplicates",
                "dedupe",
                "sha256",
                "perceptual-hash",
                "phash",
                "imagehash",
                "filesystem",
                "invoice"
            ],
            "examples": [
                "fs://host/duplicates/query/find",
                "fs://host/duplicates/command/move"
            ]
        },
        {
            "id": "get-node",
            "name": "Get Node",
            "description": "Bootstrap and health-check urirun nodes from get.ifuri.com through node:// URI routes.",
            "tags": [
                "node",
                "installer",
                "bootstrap",
                "provisioning",
                "health"
            ],
            "examples": [
                "node://get/installer/query/script",
                "node://host/runtime/query/health"
            ]
        },
        {
            "id": "github",
            "name": "GitHub",
            "description": "Clone git repos and deploy them anywhere via bindings/registry over github:// URI routes.",
            "tags": [
                "github",
                "git",
                "clone",
                "deploy",
                "bootstrap",
                "registry",
                "connector"
            ],
            "examples": [
                "github://host/repo/command/clone",
                "github://host/package/command/install",
                "github://host/repo/query/bindings"
            ]
        },
        {
            "id": "hash",
            "name": "Hash (Go)",
            "description": "Compute SHA-256 digests of text through hash:// URI commands.",
            "tags": [
                "hash",
                "sha256",
                "go",
                "polyglot",
                "connector"
            ],
            "examples": [
                "hash://host/text/query/sha256"
            ]
        },
        {
            "id": "him",
            "name": "Human-in-the-Middle",
            "description": "Human input mock (mouse/keyboard) for urisys-node.",
            "tags": [
                "him",
                "human-in-the-middle",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "him://host/mouse/query/status",
                "him://host/mouse/command/move",
                "him://host/mouse/command/click",
                "him://host/mouse/command/scroll",
                "him://host/keyboard/command/type",
                "him://host/keyboard/command/type-text",
                "him://host/keyboard/command/hotkey",
                "him://host/keyboard/command/key"
            ]
        },
        {
            "id": "img2nl",
            "name": "Screen to Language",
            "description": "Screen capture + UI target detection via img2nl (KVM eyes).",
            "tags": [
                "img2nl",
                "screen to language",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "img2nl://host/screen/command/capture-click",
                "img2nl://host/image/latest/command/click",
                "img2nl://host/image/latest/query/targets"
            ]
        },
        {
            "id": "invoice",
            "name": "Invoice field extraction",
            "description": "Extract structured fields from invoices over invoice:// URIs — NIP, number, dates, net/VAT/gross, seller, currency. Regex tuned for Polish faktura (also EN), text via pdftotext, optional LLM (OpenRouter) fallback. A folder route batches a month of invoices into a CSV with net/VAT/gross totals.",
            "tags": [
                "invoice",
                "faktura",
                "nip",
                "vat",
                "accounting",
                "ksiegowosc",
                "ocr",
                "extraction"
            ],
            "examples": [
                "invoice://host/file/query/parse",
                "invoice://host/folder/query/audit"
            ]
        },
        {
            "id": "ksef",
            "name": "KSeF 2.0",
            "description": "Polish national e-invoicing (KSeF 2.0) as ksef:// routes: auth, send invoice, query, download.",
            "tags": [
                "ksef",
                "e-invoicing",
                "faktury",
                "government",
                "poland",
                "connector"
            ],
            "examples": [
                "ksef://demo/auth/challenge",
                "ksef://demo/cert/enroll",
                "ksef://demo/cert/enrollment-data",
                "ksef://demo/cert/limits",
                "ksef://demo/invoice/{ksefNumber}",
                "ksef://demo/invoices/query",
                "ksef://demo/session/batch/open",
                "ksef://demo/session/online/{ref}/send",
                "ksef://demo/session/{ref}/close",
                "ksef://demo/session/{ref}/failed",
                "ksef://demo/session/{ref}/invoices",
                "ksef://demo/session/{ref}/upo",
                "ksef://demo/sessions/query/list",
                "ksef://prod/auth/challenge",
                "ksef://prod/cert/enroll",
                "ksef://prod/cert/enrollment-data",
                "ksef://prod/cert/limits",
                "ksef://prod/invoice/{ksefNumber}",
                "ksef://prod/invoices/query",
                "ksef://prod/session/batch/open",
                "ksef://prod/session/online/{ref}/send",
                "ksef://prod/session/{ref}/close",
                "ksef://prod/session/{ref}/failed",
                "ksef://prod/session/{ref}/invoices",
                "ksef://prod/session/{ref}/upo",
                "ksef://prod/sessions/query/list",
                "ksef://test/auth/challenge",
                "ksef://test/cert/enroll",
                "ksef://test/cert/enrollment-data",
                "ksef://test/cert/limits",
                "ksef://test/invoice/{ksefNumber}",
                "ksef://test/invoices/query",
                "ksef://test/session/batch/open",
                "ksef://test/session/online/{ref}/send",
                "ksef://test/session/{ref}/close",
                "ksef://test/session/{ref}/failed",
                "ksef://test/session/{ref}/invoices",
                "ksef://test/session/{ref}/upo",
                "ksef://test/sessions/query/list"
            ]
        },
        {
            "id": "kvm",
            "name": "KVM Control",
            "description": "Send keyboard/mouse input and capture the screen through kvm:// URI routes.",
            "tags": [
                "kvm",
                "KVM",
                "remote",
                "input",
                "keyboard",
                "mouse",
                "screen"
            ],
            "examples": [
                "kvm://host/input/command/key",
                "kvm://host/input/command/move",
                "kvm://host/screen/query/capture"
            ]
        },
        {
            "id": "llm",
            "name": "Local LLM",
            "description": "Run local LLM completions and list models through llm:// URI routes.",
            "tags": [
                "llm",
                "LLM",
                "AI",
                "Ollama",
                "qwen",
                "inference",
                "local"
            ],
            "examples": [
                "llm://host/chat/command/complete",
                "llm://host/model/query/list"
            ]
        },
        {
            "id": "mcp-filesystem",
            "name": "MCP Filesystem",
            "description": "Read, list and write files through fs:// URI routes backed by the MCP filesystem server.",
            "tags": [
                "fs",
                "MCP",
                "filesystem",
                "files",
                "read",
                "write",
                "agent"
            ],
            "examples": [
                "fs://host/file/query/read",
                "fs://host/dir/query/list",
                "fs://host/file/command/write"
            ]
        },
        {
            "id": "message",
            "name": "Messaging",
            "description": "Simple alert/message dispatch mock for lab and node.",
            "tags": [
                "message",
                "messaging",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "message://local/alert/command/send"
            ]
        },
        {
            "id": "ocr",
            "name": "OCR",
            "description": "OCR text extraction from latest screenshot or image id (mock/tesseract).",
            "tags": [
                "ocr",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "ocr://host/image/latest/query/text",
                "ocr://host/image/image_id/query/text"
            ]
        },
        {
            "id": "rdp",
            "name": "RDP Desktop",
            "description": "RDP session and X11 display queries for urirdp-docker.",
            "tags": [
                "rdp",
                "rdp desktop",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "rdp://host/session/query/status",
                "rdp://host/session/query/display",
                "rdp://host/display/query/status",
                "rdp://host/session/command/prepare-target",
                "rdp://host/session/command/dismiss-target"
            ]
        },
        {
            "id": "screen",
            "name": "Screen Capture",
            "description": "Screen capture — frame query, single capture, capture loop.",
            "tags": [
                "screen",
                "screen capture",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "screen://target/monitor/monitor/query/frame",
                "screen://target/monitor/monitor/command/capture",
                "screen://target/capture/command/loop"
            ]
        },
        {
            "id": "sheet",
            "name": "Spreadsheet I/O (XLSX/CSV)",
            "description": "Read and write XLSX/CSV over sheet:// URIs without libreoffice. CSV via stdlib (always works); XLSX via openpyxl (pure Python). Reads return {columns, rows}; writes take rows and pick CSV/XLSX from the extension, with an optional totals footer. Pairs with invoice://ksef:// to emit accountant-ready Excel.",
            "tags": [
                "sheet",
                "xlsx",
                "csv",
                "excel",
                "openpyxl",
                "spreadsheet",
                "accounting",
                "ksiegowosc",
                "bank-statement"
            ],
            "examples": [
                "sheet://host/file/query/read",
                "sheet://host/file/command/write",
                "sheet://host/file/query/info"
            ]
        },
        {
            "id": "stepper",
            "name": "Stepper Motor",
            "description": "Stepper motor URI pack (mock + rpi-gpio-step-dir drivers).",
            "tags": [
                "stepper",
                "stepper motor",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "stepper://device/axis/axis/query/status",
                "stepper://device/axis/axis/command/enable",
                "stepper://device/axis/axis/command/disable",
                "stepper://device/axis/axis/command/stop",
                "stepper://device/axis/axis/command/home",
                "stepper://device/axis/axis/command/move-relative",
                "stepper://device/axis/axis/command/move-absolute"
            ]
        },
        {
            "id": "stt",
            "name": "Speech to Text",
            "description": "Speech-to-text pack (mock MVP; browser passthrough + audio transcribe).",
            "tags": [
                "stt",
                "speech to text",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "stt://local/session/session/command/start",
                "stt://local/session/session/query/transcript",
                "stt://local/audio/command/transcribe"
            ]
        },
        {
            "id": "urimail",
            "name": "Email",
            "description": "Mail mock/mailpit/smtp automation for urisys-node.",
            "tags": [
                "urimail",
                "email",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "urimail://account/query/status",
                "urimail://account/inbox/query/unread",
                "urimail://account/message/command/compose",
                "urimail://account/message/command/send",
                "urimail://account/message/command/publish-post"
            ]
        },
        {
            "id": "urioffice",
            "name": "Office Documents",
            "description": "Office document mock/writer/LibreOffice automation for urisys-node.",
            "tags": [
                "urioffice",
                "office documents",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "urioffice://host/query/status",
                "urioffice://host/document/command/open",
                "urioffice://host/document/command/save",
                "urioffice://host/document/command/export-pdf",
                "urioffice://host/writer/command/render"
            ]
        },
        {
            "id": "usb",
            "name": "USB devices",
            "description": "Enumerate and classify the USB devices plugged into a computer over usb:// URIs. Reads the kernel's sysfs view (no root, no extra deps), labels each device by USB class codes (camera/webcam, keyboard, mouse, audio, storage, hub, printer, bluetooth, serial, smart-card/security-key) and maps it to the /dev nodes it owns (/dev/video*, /dev/input/*, /dev/ttyUSB*, /dev/hidraw*).",
            "tags": [
                "usb",
                "devices",
                "hardware",
                "camera",
                "webcam",
                "keyboard",
                "mouse",
                "hid",
                "lsusb",
                "sysfs",
                "v4l2",
                "security-key",
                "bluetooth"
            ],
            "examples": [
                "usb://host/devices/query/list",
                "usb://host/devices/query/find",
                "usb://host/cameras/query/list",
                "usb://host/input/query/list",
                "usb://host/devices/query/probe"
            ]
        },
        {
            "id": "uuid",
            "name": "UUID (JavaScript)",
            "description": "Generate UUID v4 identifiers through uuid:// URI commands.",
            "tags": [
                "uuid",
                "javascript",
                "node",
                "polyglot",
                "connector"
            ],
            "examples": [
                "uuid://host/id/query/v4"
            ]
        },
        {
            "id": "vql",
            "name": "Visual Query",
            "description": "Visual query language — UI detect/compare for urisys-node.",
            "tags": [
                "vql",
                "visual query",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "vql://host/ui/latest/query/detect",
                "vql://host/ui/latest/query/compare"
            ]
        },
        {
            "id": "webrtc",
            "name": "WebRTC",
            "description": "WebRTC session — HTTP signaling inbox (node) and DataChannel URI envelopes; browser P2P via ifURI /api/webrtc/signal.",
            "tags": [
                "webrtc",
                "tellmesh",
                "capability pack",
                "uri"
            ],
            "examples": [
                "webrtc://local/session/session/command/start",
                "webrtc://local/session/session/data/command/send",
                "webrtc://local/session/session/signal/command/post",
                "webrtc://local/session/session/signal/query/inbox"
            ]
        }
    ]
}