{
  "title": "Protobuf Decoder",
  "human_url": "https://happytails.ai/en/developer-tools/protobuf-decoder/",
  "agent_url": "https://happytails.ai/agents/en/developer-tools/protobuf-decoder/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/developer-tools/protobuf-decoder.md",
  "content": "Protobuf Decoder\nDecode a protobuf message from hex or base64. Add a .proto schema to get named fields in the proto3 JSON format, or leave it out to inspect the raw wire fields.\nHow to use Protobuf Decoder\nPaste the message bytes as hex or base64.\nOptionally paste the .proto schema and the message type.\nRun the decoder.\nReview the decoded fields and download the JSON report.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nUseful next steps\nBase64 encoder decoder\nHex to text\nHex file viewer\nAccepts up to 200,000 characters of hex or base64 (at most 500,000 bytes) and a schema of up to 100,000 characters. Decoding runs in your browser. The download is a JSON report.\nWith a schema\nFields are named with their JSON names. 64-bit integers are strings, bytes are base64, enums use their value names, and repeated fields accept packed and unpacked encodings. A message field sent several times is merged, as protobuf parsers do. Fields the schema does not define are listed as unknown.\nWithout a schema\nEvery field is shown with its number and wire type, with each possible reading: unsigned, signed and zigzag integers, fixed-size numbers, text when the bytes are valid UTF-8, and a nested message when the bytes parse as one.\nLimits\nThe schema parser covers proto2 and proto3 messages, enums, oneof, maps, nested types and reserved ranges in one file. Imports, groups, extensions and editions are not supported. Malformed bytes are rejected rather than partly decoded.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "Base64 encoder decoder",
      "url": "https://happytails.ai/en/developer-tools/base64-encoder-decoder/"
    },
    {
      "name": "Hex to text",
      "url": "https://happytails.ai/en/developer-tools/hex-to-text/"
    },
    {
      "name": "Hex file viewer",
      "url": "https://happytails.ai/en/developer-tools/hex-file-viewer/"
    }
  ],
  "tool": {
    "id": "protobuf-decoder",
    "category": "developer-tools",
    "built": true,
    "requirements": "Accepts up to 200,000 characters of hex or base64 (at most 500,000 bytes) and a schema of up to 100,000 characters. Decoding runs in your browser. The download is a JSON report.",
    "implementation": {
      "fields": [
        {
          "key": "encoding",
          "label": "Message encoding",
          "value": "auto",
          "type": "select",
          "values": [
            "auto",
            "hex",
            "base64"
          ]
        },
        {
          "key": "schema",
          "label": ".proto schema, optional",
          "value": "",
          "type": "textarea",
          "maxLength": 100000,
          "help": "proto2 or proto3 without imports. Leave empty to see the raw wire fields."
        },
        {
          "key": "messageType",
          "label": "Message type, optional",
          "value": "",
          "type": "text",
          "maxLength": 500,
          "help": "Needed when the schema defines more than one message, such as demo.Person."
        }
      ],
      "registrationFamily": "api-contracts-reference",
      "codeDirection": "ltr",
      "inputMaxLength": 200000,
      "inputErrorCode": "API_CONTRACTS_REFERENCE_TOO_LONG",
      "note": "Runs in your browser in a background worker. Accepts up to 200000 characters of hex or base64 and a schema of up to 100000 characters.",
      "experience": {
        "automatic": false,
        "single": false,
        "inputMaxLength": 200000,
        "inputMode": "text",
        "label": "Encoded message",
        "placeholder": "0a 03 41 31 37 10 03",
        "help": "Hex digits (spaces allowed) or standard base64. Up to 200,000 characters. Review the settings before running.",
        "helpParts": [
          "Hex digits (spaces allowed) or standard base64.",
          "Up to 200,000 characters.",
          "Review the settings before running."
        ],
        "action": null
      },
      "mode": "explicit",
      "interactive": false
    },
    "execution": "Browser interface",
    "api": null,
    "browser_agent": {
      "supported": true,
      "name": "run_current_tool",
      "discovery": "WebMCP on the human page in a supporting browser",
      "verification": "See audit/API-AUDIT.md; availability is not verification"
    }
  },
  "markdown": "# Protobuf Decoder\n\n- Human page: https://happytails.ai/en/developer-tools/protobuf-decoder/\n- Markdown: https://happytails.ai/en/developer-tools/protobuf-decoder.md\n- Structured JSON: https://happytails.ai/agents/en/developer-tools/protobuf-decoder/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `protobuf-decoder` |\n| Category | developer-tools |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Use the visible action or interactive controls. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nRuns in your browser in a background worker. Accepts up to 200000 characters of hex or base64 and a schema of up to 100000 characters.\n\n### Inputs and settings\n\nText input: Encoded message.\n\nExample or placeholder shown in the interface (not a validated fixture):\n\n```text\n0a 03 41 31 37 10 03\n```\n\nHex digits (spaces allowed) or standard base64. Up to 200,000 characters. Review the settings before running.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `encoding` | Message encoding | select | \"auto\" | Allowed: auto, hex, base64 |\n| `schema` | .proto schema, optional | textarea | \"\" |  |\n| `messageType` | Message type, optional | text | \"\" |  |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nAccepts up to 200,000 characters of hex or base64 (at most 500,000 bytes) and a schema of up to 100,000 characters. Decoding runs in your browser. The download is a JSON report.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"protobuf-decoder\",\n  \"category\": \"developer-tools\",\n  \"built\": true,\n  \"requirements\": \"Accepts up to 200,000 characters of hex or base64 (at most 500,000 bytes) and a schema of up to 100,000 characters. Decoding runs in your browser. The download is a JSON report.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"encoding\",\n        \"label\": \"Message encoding\",\n        \"value\": \"auto\",\n        \"type\": \"select\",\n        \"values\": [\n          \"auto\",\n          \"hex\",\n          \"base64\"\n        ]\n      },\n      {\n        \"key\": \"schema\",\n        \"label\": \".proto schema, optional\",\n        \"value\": \"\",\n        \"type\": \"textarea\",\n        \"maxLength\": 100000,\n        \"help\": \"proto2 or proto3 without imports. Leave empty to see the raw wire fields.\"\n      },\n      {\n        \"key\": \"messageType\",\n        \"label\": \"Message type, optional\",\n        \"value\": \"\",\n        \"type\": \"text\",\n        \"maxLength\": 500,\n        \"help\": \"Needed when the schema defines more than one message, such as demo.Person.\"\n      }\n    ],\n    \"registrationFamily\": \"api-contracts-reference\",\n    \"codeDirection\": \"ltr\",\n    \"inputMaxLength\": 200000,\n    \"inputErrorCode\": \"API_CONTRACTS_REFERENCE_TOO_LONG\",\n    \"note\": \"Runs in your browser in a background worker. Accepts up to 200000 characters of hex or base64 and a schema of up to 100000 characters.\",\n    \"experience\": {\n      \"automatic\": false,\n      \"single\": false,\n      \"inputMaxLength\": 200000,\n      \"inputMode\": \"text\",\n      \"label\": \"Encoded message\",\n      \"placeholder\": \"0a 03 41 31 37 10 03\",\n      \"help\": \"Hex digits (spaces allowed) or standard base64. Up to 200,000 characters. Review the settings before running.\",\n      \"helpParts\": [\n        \"Hex digits (spaces allowed) or standard base64.\",\n        \"Up to 200,000 characters.\",\n        \"Review the settings before running.\"\n      ],\n      \"action\": null\n    },\n    \"mode\": \"explicit\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nDecode a protobuf message from hex or base64. Add a .proto schema to get named fields in the proto3 JSON format, or leave it out to inspect the raw wire fields.\n\n### How to use Protobuf Decoder\n\n1. Paste the message bytes as hex or base64.\n2. Optionally paste the .proto schema and the message type.\n3. Run the decoder.\n4. Review the decoded fields and download the JSON report.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n## Useful next steps\n\n- [Base64 encoder decoder](https://happytails.ai/en/developer-tools/base64-encoder-decoder/) ([Markdown](https://happytails.ai/en/developer-tools/base64-encoder-decoder.md))\n\n- [Hex to text](https://happytails.ai/en/developer-tools/hex-to-text/) ([Markdown](https://happytails.ai/en/developer-tools/hex-to-text.md))\n\n- [Hex file viewer](https://happytails.ai/en/developer-tools/hex-file-viewer/) ([Markdown](https://happytails.ai/en/developer-tools/hex-file-viewer.md))\n\nAccepts up to 200,000 characters of hex or base64 (at most 500,000 bytes) and a schema of up to 100,000 characters. Decoding runs in your browser. The download is a JSON report.\n\n## With a schema\n\nFields are named with their JSON names. 64-bit integers are strings, bytes are base64, enums use their value names, and repeated fields accept packed and unpacked encodings. A message field sent several times is merged, as protobuf parsers do. Fields the schema does not define are listed as unknown.\n\n### Without a schema\n\nEvery field is shown with its number and wire type, with each possible reading: unsigned, signed and zigzag integers, fixed-size numbers, text when the bytes are valid UTF-8, and a nested message when the bytes parse as one.\n\n### Limits\n\nThe schema parser covers proto2 and proto3 messages, enums, oneof, maps, nested types and reserved ranges in one file. Imports, groups, extensions and editions are not supported. Malformed bytes are rejected rather than partly decoded.\n"
}