ARCLinearGitHub-MCP

ARCLinearGitHub-MCP

Bridges Linear issue tracking and GitHub repository management with ARC naming conventions, enabling composite workflows like creating a Linear issue and GitHub branch in one step.

Category
Visit Server

README

ARCLinearGitHub-MCP

Swift Platforms MCP License Status

Native Swift Model Context Protocol (MCP) server that bridges Linear (issue tracking) and GitHub (repository management), enforces ARC Labs naming conventions, and exposes 21 tools to Claude Code over stdio.

  • Multi-workspace — talk to several Linear workspaces from one binary via LINEAR_WORKSPACES.
  • Convention enforcement — branch, commit and PR validators with byte-compatible regex ported from the Python reference implementation.
  • Composite workflowsworkflow_start_feature creates the Linear issue and the GitHub branch in a single round-trip.
  • Swift 6 + strict concurrency — every public type is Sendable, the data layer uses actors, no force-unwraps and no nonisolated(unsafe).

This is the Swift rewrite of the original Python LinearGitHub-MCP. The wire format is identical (same tool names, same request/response shape), so existing Claude Code configurations only need a binary-path swap.


Overview

ARCLinearGitHub-MCP is a Swift Package laid out following the microapps SPM pattern (Majid Jabrayilov) and ARC Clean Architecture:

Sources/
├── ARCMCPModels         Foundation — entities + error types
├── ARCMCPNetworking     Foundation — URLSession HTTP + retry policy
├── ARCMCPValidators     Foundation — branch + commit validators
├── ARCMCPLinear         Data       — GraphQL client + workspace registry
├── ARCMCPGitHub         Data       — REST client
├── ARCMCPCore           Orchestration — AppDependencies + MCP tools
├── ARCMCPMocks          Tests      — StubURLProtocol + AppDependencies.mock
└── arc-mcp              Executable — stdio MCP server

The 21 MCP tools live in ARCMCPCore/Tools/. Each handler decodes its arguments via ArgumentAccess, calls one or more closures on AppDependencies, then maps the entities back into the Python-compatible {success: bool, ...} envelope via Mappers.

Requirements

  • macOS 14 Sonoma or later
  • Swift 6.0 toolchain (Xcode 16+)
  • Linear API token and GitHub Personal Access Token

Installation

git clone https://github.com/arclabs-studio/ARCLinearGitHub-MCP.git
cd ARCLinearGitHub-MCP
make build-release

The binary lands at .build/release/arc-mcp.

Configuration

Every setting is read from the process environment.

export GITHUB_TOKEN=ghp_xxx
export GITHUB_ORG=arclabs-studio
export DEFAULT_PROJECT=PLAT
export DEFAULT_REPO=MyApp

# single-workspace
export LINEAR_API_KEY=lin_api_xxx

# or multi-workspace
export LINEAR_WORKSPACES='{"ios":"lin_api_a","backend":"lin_api_b"}'

Optional overrides: LINEAR_API_URL, GITHUB_API_URL, REQUEST_TIMEOUT.

Usage

Claude Code

Add the binary to ~/.claude/mcp-servers.json:

{
  "mcpServers": {
    "arc-linear-github": {
      "command": "/abs/path/.build/release/arc-mcp"
    }
  }
}

Restart Claude Code. /mcp lists 21 tools under arc-linear-github.

Programmatic embedding

import ARCMCPCore
import MCP

let settings = try Settings.fromEnvironment()
let server = Server(name: "my-mcp", version: "1.0.0",
                    capabilities: .init(tools: .init(listChanged: false)))
await ToolRegistry.register(on: server, dependencies: .production(settings: settings))
try await server.start(transport: StdioTransport())
await server.waitUntilCompleted()

Development

make lint        # SwiftLint
make format      # SwiftFormat (dry-run)
make fix         # Apply SwiftFormat
make build       # debug build
make test        # swift test --no-parallel (StubURLProtocol uses shared state)
make coverage    # tests with code coverage
make docs        # DocC archive for ARCMCPCore
make run         # build-release && exec arc-mcp

Project layout

Target Purpose
ARCMCPModels Codable Sendable Linear and GitHub entities + MCPDomainError
ARCMCPNetworking HTTPClient actor, RetryPolicy, HTTPError
ARCMCPValidators Pure branch + commit validators with ARC regex
ARCMCPLinear GraphQL client + multi-workspace registry
ARCMCPGitHub REST client + endpoint enum
ARCMCPCore AppDependencies, MCP tool registry, mappers
ARCMCPMocks StubURLProtocol + AppDependencies.mock for tests
arc-mcp @main stdio executable

Testing

Swift Testing. Run serially because StubURLProtocol keeps its handler in static OSAllocatedUnfairLock state:

swift test --no-parallel

Tests are organised per target:

  • ARCMCPModelsTests — Codable round-trip for every entity.
  • ARCMCPNetworkingTests — retry semantics with stubbed URLSession.
  • ARCMCPValidatorsTests — every case ported from tests/test_validators/.
  • ARCMCPLinearTests / ARCMCPGitHubTestsURLProtocol stubs + fixture JSON.
  • ARCMCPCoreTestsSettings env parsing + tool registry dispatch.

Architecture

  • Clean Architecture — Domain (ARCMCPModels, *Validators), Data (*Linear, *GitHub), Orchestration (ARCMCPCore).
  • Microapps SPM — one library target per concern, layered by build dependency.
  • Closure-based DI — every capability is a @Sendable async closure on AppDependencies. production(settings:) wires real actors; .mock (in ARCMCPMocks) returns canned values.
  • Strict concurrency — Swift 6 .v6 language mode across every target.

Conventions

  • Branches: <type>/<issue-id>-<description>
  • Commits: <type>(<scope>): <subject>
  • PRs: <Type>/<Issue-ID>: <Title>

Full reference: workflow_get_conventions tool, or ARCMCPValidators.NamingStandards.

License

MIT. See LICENSE.

Related


<p align="center">Made with 💛 by ARC Labs Studio</p>

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured