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:
- Connect external data sources (GitHub, Jira, Linear, databases, MCP servers, REST APIs)
- Query them using natural language descriptions
- Materialize results as markdown files
- 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
- Navigate to Sources in the sidebar
- Click Add Source
- Select your source type (GitHub, Jira, etc.)
- Enter the required credentials
- Click Test Connection to verify
- 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.
- Open your source
- Click Add Query
- Give it a name (e.g., "Open PRs")
- Describe what you want in natural language
- Optionally set an output path
- 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
# 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
# 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
# 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
# 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:
prs/
pr-123.md
pr-124.md
pr-125.mdEach file contains structured 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, bobsmithScheduling Refresh
Context gets stale. You can schedule automatic refresh using cron expressions:
# Every hour
0 * * * *
# Every day at 9am
0 9 * * *
# Every Monday at 8am
0 8 * * 1Set 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:
# 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