{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "bestpractical--rt",
    "name": "Request Tracker",
    "tagline": "Enterprise ticket tracker with a Builder-shipped MCP server for search, create, reply, and update.",
    "shortTagline": "Enterprise ticket tracker",
    "description": "Request Tracker (RT) is Best Practical's GPL ticketing system, in production since 1996 and now at 6.x. Self-hosting is free; Best Practical sells cloud hosting and support. The same org publishes mcp-server-rt, a stdio MCP server that proxies RT's REST 2.0 API so an agent can search with TicketSQL, read history, create and update tickets, and reply to requestors.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "support-bookkeeping",
    "alternativeTo": [
      "Zendesk",
      "Jira Service Management"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "human-written",
    "codeStack": {
      "languages": [
        "Perl",
        "JavaScript"
      ],
      "frameworks": [
        "HTML::Mason"
      ],
      "packageManager": "cpan",
      "database": [
        "MySQL",
        "MariaDB",
        "PostgreSQL",
        "Oracle"
      ],
      "hostingTarget": [
        "self-host (Apache/nginx FastCGI or mod_perl)"
      ]
    },
    "modelStack": {
      "providers": [
        "any MCP client"
      ],
      "models": [],
      "requiredKeys": [
        "RT_URL",
        "RT_TOKEN"
      ],
      "promptLocations": [],
      "tools": [
        "search_tickets",
        "get_ticket",
        "get_ticket_history",
        "get_transaction",
        "get_queue",
        "list_queues",
        "get_queue_fields",
        "lookup_user",
        "get_current_user",
        "get_ticketsql_grammar",
        "create_ticket",
        "update_ticket",
        "add_comment",
        "add_reply",
        "get_ticket_attachments",
        "get_attachment",
        "save_attachment"
      ]
    },
    "repos": [
      {
        "url": "https://github.com/bestpractical/rt",
        "owner": "bestpractical",
        "name": "rt",
        "license": "GPL-2.0",
        "stars": 1149,
        "lastCommit": "2026-09-01"
      },
      {
        "url": "https://github.com/bestpractical/mcp-server-rt",
        "owner": "bestpractical",
        "name": "mcp-server-rt",
        "license": "GPL-2.0",
        "stars": 8,
        "lastCommit": "2026-08-31"
      }
    ],
    "interface": {
      "kind": "mcp",
      "url": "https://github.com/bestpractical/mcp-server-rt",
      "official": true,
      "hosted": "local"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Search tickets",
        "reachable": true,
        "evidence": "search_tickets with full TicketSQL; get_ticketsql_grammar for syntax"
      },
      {
        "job": "Read a ticket and its history",
        "reachable": true,
        "evidence": "get_ticket, get_ticket_history, get_transaction, attachment tools"
      },
      {
        "job": "Create tickets with metadata",
        "reachable": true,
        "evidence": "create_ticket sets status, owner, requestors, due dates, custom fields, custom roles, links"
      },
      {
        "job": "Reply to requestors and add internal comments",
        "reachable": true,
        "evidence": "add_reply and add_comment; README example resolves a ticket and notifies the requestor in one step"
      },
      {
        "job": "Update status, owner, priority, watchers, links",
        "reachable": true,
        "evidence": "update_ticket"
      },
      {
        "job": "Discover queues, custom fields, and users",
        "reachable": true,
        "evidence": "list_queues, get_queue, get_queue_fields, lookup_user"
      },
      {
        "job": "Dashboards, charts, and reports",
        "reachable": false,
        "evidence": "no dashboard or chart tool in the MCP tool table"
      },
      {
        "job": "Track assets (RT Assets)",
        "reachable": false,
        "evidence": "no asset tools; MCP tool table is ticket, queue, user, attachment only"
      },
      {
        "job": "Configure scrips and automation",
        "reachable": false,
        "evidence": "administration is not in the MCP surface; RT_SiteConfig.pm and the admin UI"
      },
      {
        "job": "Knowledge base articles",
        "reachable": false,
        "evidence": "no article tools in the MCP tool table"
      }
    ],
    "editions": [
      {
        "name": "Free (self-hosted)",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/bestpractical/rt"
          },
          {
            "kind": "installable",
            "url": "https://docs.bestpractical.com/rt/latest/index.html",
            "command": "./configure && make install"
          }
        ]
      },
      {
        "name": "Cloud Starter",
        "price": {
          "amount": 15,
          "currency": "USD",
          "period": "user/month, annual, 5-user minimum"
        },
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://requesttracker.com/pricing"
          }
        ]
      },
      {
        "name": "Cloud Business",
        "price": {
          "amount": 29,
          "currency": "USD",
          "period": "user/month, annual, 10-user minimum"
        },
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://requesttracker.com/pricing"
          }
        ]
      },
      {
        "name": "Cloud Growth",
        "price": {
          "amount": 39,
          "currency": "USD",
          "period": "user/month, annual"
        },
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://requesttracker.com/pricing"
          }
        ]
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md, Claude Code plugin, or skills install target in the repo."
    },
    "customization": {
      "summary": "Override defaults in etc/RT_SiteConfig.pm; every setting is documented in etc/RT_Config.pm.in. An SMB sets $rtname, $Organization, $CorrespondAddress, $CommentAddress, $WebDomain, $Timezone, mail delivery ($MailCommand, $SetOutgoingMailFrom), and @Plugins, then builds queues, custom fields, and scrips in the admin UI. For the MCP server, set RT_URL and RT_TOKEN in the client config; the token is created under Settings > Auth Tokens and needs the ManageAuthTokens right.",
      "envVars": [
        "RT_URL",
        "RT_TOKEN"
      ],
      "configFiles": [
        "etc/RT_SiteConfig.pm",
        "etc/RT_Config.pm.in"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 4
    },
    "useWhen": [
      "we run a shared support or IT queue by email and want tickets triaged, assigned, and answered from our agent without leaving RT's audit trail",
      "we already have an RT instance and want Claude or Cursor to search TicketSQL and draft replies as a named user"
    ],
    "accounts": [
      "none beyond your own RT instance; Best Practical account only for Cloud editions"
    ],
    "active": true,
    "lastActivity": "2026-09-01",
    "gotchas": [
      "MCP server needs RT 6.0+ with REST 2.0 enabled; older RT 4.x/5.x installs must upgrade first",
      "Everything the agent does is logged as the token's user, including emails sent on replies; a repeated add_reply sends mail again",
      "Perl stack with a long CPAN dependency install; SELinux default blocks /opt/rt6",
      "GPL-2.0 copyleft on both RT and the MCP server"
    ],
    "fit": {
      "adaptable": 2,
      "operable": 3
    },
    "evidence": {
      "formFactor": "README: web app served through FastCGI or mod_perl; rt-server standalone",
      "executionModel": "no model at runtime in core; etc/ai directory exists in the 6.x tree, treated as optional",
      "operability": "github.com/bestpractical/mcp-server-rt is under the same org that ships RT; README lists 17 tools",
      "effort": "README step 6a: configure RT by editing etc/RT_SiteConfig.pm with values from etc/RT_Config.pm; RT_Config.pm.in lists Set($rtname) and 60+ other keys",
      "editions": "README: freely available under GPL v2; requesttracker.com/pricing: Starter $15, Business $29, Growth $39 per user/month",
      "active": "gh api: pushed 2026-09-01; mcp-server-rt pushed 2026-08-31"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.7,
      "operability": 0.95,
      "effort": 0.85,
      "reach": 0.9,
      "editions": 0.8
    },
    "openQuestions": [
      "What the etc/ai directory in RT 6 does and whether it makes the core hybrid",
      "Whether Cloud editions expose auth tokens so the MCP server works against hosted RT"
    ],
    "sources": [
      {
        "url": "https://github.com/bestpractical/rt",
        "foundBy": "sourcing:support-bookkeeping:curated"
      },
      {
        "url": "https://github.com/bestpractical/mcp-server-rt",
        "foundBy": "sourcing:support-bookkeeping:registries"
      },
      {
        "url": "https://docs.bestpractical.com/rt/latest/RT/REST2.html",
        "foundBy": "sourcing:support-bookkeeping:github"
      },
      {
        "url": "https://requesttracker.com/pricing",
        "foundBy": "analysis"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "unverified",
      "reason": "Official MCP from the Builder on a 30-year-old ticketing product; ticket lifecycle fully reachable, admin and assets not. Config surface is a documented Perl file.",
      "disputed": []
    },
    "url": "apps/bestpractical--rt.html",
    "coverage": "partial",
    "paid": true,
    "source": "research/verified/bestpractical--rt.json"
  }
}
