{"name":"io.github.syrian963/ticket-ai-mcp","slug":"syrian963-ticket-ai-mcp","title":"Ticket AI","description":"Measures tickets against the ones your team already shipped: sections, length, labels, duplicates.","url":"https://mcp.market/server/syrian963-ticket-ai-mcp","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":25,"stars":0,"forks":0,"downloads_week":27,"last_push_at":"2026-09-12T11:38:05.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/syrian963/Ticket-AI-MCP","website":"https://github.com/syrian963/Ticket-AI-MCP","version":"0.1.1","remotes":[],"packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"ticket-ai-mcp","version":"0.1.1","runtimeHint":"uvx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Which tracker to read: gitlab, jira or github.","isRequired":true,"name":"TICKET_AI_TRACKER"},{"description":"The project to measure. A GitLab path like acme/shop or its numeric id, a Jira project key like PROJ, or a GitHub owner/repo.","isRequired":true,"name":"TICKET_AI_PROJECT"},{"description":"Base URL of the GitLab instance, for example https://gitlab.example.com. Required when the tracker is gitlab.","name":"TICKET_AI_GITLAB_URL"},{"description":"GitLab personal access token. The read_api scope is enough; nothing here writes.","isSecret":true,"name":"TICKET_AI_GITLAB_TOKEN"},{"description":"Base URL of the Jira instance. Cloud or self-hosted Server and Data Center; which one is detected from the instance.","name":"TICKET_AI_JIRA_URL"},{"description":"Account email, for Jira Cloud's basic auth. Leave unset for a public board or for a Server personal access token.","name":"TICKET_AI_JIRA_EMAIL"},{"description":"Jira API token from id.atlassian.com, or a Server personal access token on its own. Leave unset to read a public instance anonymously.","isSecret":true,"name":"TICKET_AI_JIRA_TOKEN"},{"description":"GitHub token with read access to the repository's issues.","isSecret":true,"name":"TICKET_AI_GITHUB_TOKEN"},{"description":"Checkout to search when gathering context for a subject. Defaults to the working directory, which on a wrong guess produces confident nonsense - the report names the directory it searched.","name":"TICKET_AI_REPO"},{"description":"Force the language tickets should be written in, overriding what was measured in the corpus. Leave unset unless the board is mid-switch: a measurement beats a setting.","name":"TICKET_AI_TICKET_LANGUAGE"},{"description":"Where the learned profile is kept between runs. Defaults to .ticket-ai/ under the working directory.","name":"TICKET_AI_CACHE_DIR"}]}],"tools":[{"name":"house_style","description":"What this team's tickets look like: template, length, labels, habits.","write_action":false,"price_micros":0,"input_schema":null},{"name":"learn_conventions","description":"Learn how this team writes tickets, and cache the result.","write_action":false,"price_micros":0,"input_schema":null},{"name":"review_draft","description":"Check a ticket you have written but not created yet.","write_action":false,"price_micros":0,"input_schema":null},{"name":"review_open_tickets","description":"Review every open ticket and list them least-aligned first.","write_action":false,"price_micros":0,"input_schema":null},{"name":"review_ticket","description":"Measure one ticket against the learned house style.","write_action":false,"price_micros":0,"input_schema":null},{"name":"template_gaps","description":"Compare the issue template this repository declares with the tickets it gets.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ticket_context","description":"Gather what is known about a subject before you write the ticket for it.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ticket_template","description":"The skeleton to fill in when writing a new ticket here.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-09-19T20:15:39.733Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T20:15:39.746Z","components":{"code":{"score":25,"max":25,"notes":["30 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 7 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"ticket-ai-mcp","version":"0.1.1","found":true,"license":"MIT","dependencyCount":2,"publishedAt":"2026-09-11T11:46:16.913225Z"}],"repo":{"found":true,"owner":"syrian963","repo":"Ticket-AI-MCP","archived":false,"pushedAt":"2026-09-12T11:38:05Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/197386113?v=4","ownerCreatedAt":"2025-02-01T12:54:32Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":0,"forks":0,"downloadsWeek":27,"license":"MIT","lastPushAt":"2026-09-12T11:38:05.000Z","score":25}}}},"grade_history":[],"reviews":[]}