{"name":"org.openlyuseful/linear-project","slug":"openlyuseful-linear-project","title":"Linear Project","description":"Scope-gated Linear project administration with optional GitHub and Obsidian evidence adapters","url":"https://mcp.market/server/openlyuseful-linear-project","rating":null,"grade":"B","score":72,"certified":false,"status":"active","category":"devtools","tags":["devtools","productivity"],"presence":{"score":21,"stars":0,"forks":0,"downloads_week":36,"last_push_at":"2026-08-23T16:08:01.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Openly-Useful/linear-project-skills","website":"https://github.com/Openly-Useful/linear-project-skills/tree/main/mcp/linear-project-mcp-server","version":"0.1.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@openly-useful/linear-project-mcp-server","version":"0.1.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Linear API key. Configure this or LINEAR_ACCESS_TOKEN through a protected secret store.","isSecret":true,"name":"LINEAR_API_KEY"},{"description":"Linear OAuth access token. Configure this or LINEAR_API_KEY through a protected secret store.","isSecret":true,"name":"LINEAR_ACCESS_TOKEN"},{"description":"Exact Linear organization ID allowed for scoped operations.","isRequired":true,"name":"LINEAR_ALLOWED_ORGANIZATION_ID"},{"description":"Comma-separated exact Linear team IDs. Required when reusing an existing team; leave empty only while bootstrapping a new dedicated team.","name":"LINEAR_ALLOWED_TEAM_IDS"},{"description":"Comma-separated exact Linear project IDs. Required after project discovery; leave empty only during initial bootstrap.","name":"LINEAR_ALLOWED_PROJECT_IDS"},{"description":"Comma-separated exact scope codes. Leave empty for read-only capability inspection.","name":"LINEAR_ALLOWED_SCOPE_CODES"},{"description":"Optional GitHub token used only by the read-only evidence adapter.","isSecret":true,"name":"GITHUB_TOKEN"},{"description":"Comma-separated owner/repository allowlist for GitHub evidence reads.","name":"GITHUB_ALLOWED_REPOSITORIES"},{"description":"Optional normalized absolute path to an Obsidian vault.","format":"filepath","name":"OBSIDIAN_VAULT_PATH"},{"description":"Optional expected Obsidian vault directory name.","name":"OBSIDIAN_VAULT_NAME"},{"description":"Comma-separated vault-relative directories allowed for Obsidian operations.","name":"OBSIDIAN_ALLOWED_DIRECTORIES"},{"description":"Global mutation gate. Keep false unless opening a separately bounded write window.","format":"boolean","default":"false","name":"MCP_WRITES_ENABLED"},{"description":"Future RFC3339 expiry for a write window; enabled windows may last at most 60 minutes.","name":"MCP_WRITE_WINDOW_EXPIRES_AT"},{"description":"Optional normalized absolute path for the append-only NDJSON operation audit.","format":"filepath","name":"MCP_AUDIT_LOG_PATH"}]}],"tools":[{"name":"github_get_project_evidence","description":"Read and normalize one allowlisted GitHub repository, commit, pull request, or issue as canonical project evidence. GitHub access is always read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"linear_project_bootstrap","description":"Create or reuse the exact team, project, ACQI-style issue label, and matching project label. Supports an existing team, a dedicated key-bearing team, or a key-bearing subteam. Optionally verifies and links an allowlisted GitHub repository and Obsidian project note, then creates an idempotent first issue with immediate readback.","write_action":true,"price_micros":0,"input_schema":null},{"name":"linear_project_capabilities","description":"Report configured Linear, GitHub, and Obsidian adapters, exact allowlist coverage, workspace reachability, team-admin support, and whether mutations are enabled. Never writes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"linear_project_create_team","description":"Idempotently create a dedicated Linear team whose key exactly equals an allowlisted scope code. Optionally create it as a subteam of an allowlisted parent. Verifies empty issue history on new teams so CODE-1 can be attempted safely.","write_action":true,"price_micros":0,"input_schema":null},{"name":"linear_project_find_candidates","description":"Search for potentially related Linear issues, discard results from non-allowlisted teams, and classify whether each candidate is already in the destination project, carries the scope label, or is historical. Never moves or mutates issues.","write_action":false,"price_micros":0,"input_schema":null},{"name":"linear_project_link_evidence","description":"Verify an allowlisted GitHub reference or allowlisted Obsidian note, confirm the destination issue is inside the exact project and carries the scope label, then add an idempotent evidence link. Does not copy Obsidian note contents into Linear.","write_action":false,"price_micros":0,"input_schema":null},{"name":"linear_project_list_scoped_issues","description":"List issues only when they belong to the exact allowlisted Linear project and carry its exact scope-code issue label. Supports cursor pagination and never writes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"linear_project_move_candidate","description":"Move one previously reviewed, allowlisted issue into the exact destination project and apply its scope label. Same-team moves preserve the issue identifier and existing labels. Cross-team moves replace source-team labels and require explicit acknowledgement that the identifier changes. Never changes status or completion.","write_action":false,"price_micros":0,"input_schema":null},{"name":"linear_project_resolve_scope","description":"Resolve one allowlisted team, project, issue label, and project label by exact IDs or exact names. Fails on ambiguity and never mutates Linear.","write_action":false,"price_micros":0,"input_schema":null},{"name":"linear_project_upsert_scoped_issue","description":"Create or update exactly one issue inside an allowlisted team and project using a deterministic source marker. Always applies the scope label. Historical records receive the exact [HISTORICAL] title prefix, a HISTORICAL label, and non-actionability metadata.","write_action":true,"price_micros":0,"input_schema":null},{"name":"obsidian_read_project_note","description":"Read one size-limited Markdown note by safe vault-relative path inside the configured Obsidian directory allowlist. Never writes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"obsidian_search_project_notes","description":"Search Markdown notes only inside configured Obsidian directories. Symlinks, traversal, oversized files, and non-Markdown files are excluded. Never writes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"obsidian_upsert_project_note","description":"Create or replace only the Openly Useful managed section of an allowlisted Obsidian Markdown note. Preserves all content outside the marker block and requires global writes to be enabled.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":72,"grade":"B","scanned_at":"2026-11-01T13:27:46.821Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-01T13:27:46.785Z","components":{"code":{"score":25,"max":25,"notes":["24 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":12,"max":15,"notes":["last push 70 days ago"]},"identity":{"score":4,"max":10,"notes":["namespace and repository owner differ"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@openly-useful/linear-project-mcp-server","version":"0.1.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-08-23T15:38:15.902Z","repositoryUrl":"git+https://github.com/Openly-Useful/linear-project-skills.git","weeklyDownloads":36}],"repo":{"found":true,"owner":"Openly-Useful","repo":"linear-project-skills","archived":false,"pushedAt":"2026-08-23T16:08:01Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/316745629?v=4","ownerCreatedAt":"2026-08-13T22:31:55Z","license":"MIT"},"icon":{"url":"https://openlyuseful.org/brand/ou-profile-mark-v1.svg","source":"registry"},"presence":{"stars":0,"forks":0,"downloadsWeek":36,"license":"MIT","lastPushAt":"2026-08-23T16:08:01.000Z","score":21}}}},"grade_history":[],"reviews":[]}