Documentation

Connect Your Sources

Give your AI agents real context by connecting GitHub, Jira, Linear, databases, MCP servers, and REST APIs.

Experimental Program

This feature is part of the MigrateForce AI Rollup for PE experimental program and is available to select customers by invitation. Contact migrateforce@sociallabs.com for access.

What is Context Materialization?

MCP gives AI agents tools (actions they can take). MigrateForce gives AI agents context (knowledge about your systems). Connect your sources, describe what data you need, and materialize it into markdown files that Claude Code and other agents can read.

Overview

AI agents are powerful, but they lack context about your specific systems. They don't know what's in your GitHub PRs, your Jira tickets, or your database. Connect Your Sources solves this by letting you:

  1. Connect external data sources (GitHub, Jira, Linear, databases, MCP servers, REST APIs)
  2. Query them using natural language descriptions
  3. Materialize results as markdown files
  4. Point your AI agent at those files for context

Supported Sources

GitHub

Pull requests, issues, repository metadata, and commit history.

Required: org, repo, personal access token

Jira

Issues, sprints, epics with full descriptions and metadata.

Required: domain, email, API token

Linear

Issues, projects, and cycles from your Linear workspace.

Required: API key

Database

PostgreSQL and MySQL queries. Results become context files.

Required: connection string

MCP Server

Connect to any MCP server to discover and call tools.

Required: server URL

REST API

Any REST API with Bearer, Basic, API Key, or OAuth2 auth.

Required: base URL, auth config

Getting Started

Step 1: Add a Source

  1. Navigate to Sources in the sidebar
  2. Click Add Source
  3. Select your source type (GitHub, Jira, etc.)
  4. Enter the required credentials
  5. Click Test Connection to verify
  6. Save the source
Credentials are encrypted

Your credentials are encrypted at rest and never exposed in API responses. Only you can access your sources.

Step 2: Add a Query

Each source can have multiple queries. A query describes what data you want to extract.

  1. Open your source
  2. Click Add Query
  3. Give it a name (e.g., "Open PRs")
  4. Describe what you want in natural language
  5. Optionally set an output path
  6. Save the query

Defining Queries

Queries are described in natural language. The system interprets your description and fetches the appropriate data. Here are examples for each source type:

GitHub Queries

markdown
# Pull requests
"Get all open PRs with their descriptions and reviewers"
"Get merged PRs from the last week"

# Issues
"Get open issues labeled as bugs"
"Get feature requests from the last month"

# Repository
"Get repository overview and README"

Jira Queries

markdown
# Sprint work
"Get all issues in the current sprint"
"Get open bugs in project MYPROJ"

# Backlog
"Get unassigned issues ordered by priority"
"Get issues updated in the last 7 days"

Linear Queries

markdown
# Active work
"Get open issues assigned to me"
"Get in-progress issues for the current cycle"

# Backlog
"Get todo items ordered by priority"

Database Queries

markdown
# Schema exploration
"List all tables and their row counts"

# Data queries
"Get recent orders with customer names"
"Get products with low inventory"

Materializing Context

Once you've defined a query, click Materialize to run it. This fetches data from the source and converts it to markdown files.

What Gets Created

For GitHub PRs, you'll get files like:

text
prs/
  pr-123.md
  pr-124.md
  pr-125.md

Each file contains structured markdown:

markdown
# PR #123: Add user authentication

**Author**: johndoe
**State**: open
**Created**: 2026-02-10T14:30:00Z
**Branch**: `feature/auth` -> `main`
**URL**: https://github.com/org/repo/pull/123

## Description

This PR adds user authentication using JWT tokens...

---
Labels: enhancement, security
Reviewers: janedoe, bobsmith

Scheduling Refresh

Context gets stale. You can schedule automatic refresh using cron expressions:

text
# Every hour
0 * * * *

# Every day at 9am
0 9 * * *

# Every Monday at 8am
0 8 * * 1

Set the schedule on your query, and it will automatically re-materialize on that schedule.

Security

Secrets Never Exposed

API responses redact all credentials. You'll see [REDACTED] instead of actual tokens.

SSRF Protection

URLs are validated to block requests to private networks (localhost, 10.x.x.x, etc.).

Read-Only Database

Database queries are restricted to SELECT. No writes allowed.

Row-Level Security

You can only access sources and queries you created.

Using with Claude Code

Once you've materialized context, tell Claude Code to read from those files:

markdown
# In your conversation with Claude Code
"Read the files in my-project/prs/ to understand the open PRs"
"Check the jira-issues/ folder for current sprint work"
"Look at the database-schema.md file for table structure"

Claude Code can now reference real data from your systems when helping you code.

Best Practice

Create a CLAUDE.md file in your project that tells Claude Code where to find your materialized context. For example:

## Context Sources

- `context/prs/` - Open pull requests from GitHub
- `context/jira/` - Current sprint issues from Jira
- `context/schema.md` - Database schema overview

Next Steps