> ## Documentation Index
> Fetch the complete documentation index at: https://docs.onelamp.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Data sources

> Connect your tools so OneLamp indexes their content on demand into your context.

A **data source** is a tool you already work in — Notion, Google Drive, Slack, or
any remote MCP server — that you connect so OneLamp can pull its documents into
your [Library](/concepts/library) and **index them on demand**, enriching the same
living context layer your AI tools draw on. It's not a pass-through
aggregator: pulled-in content becomes part of your context, not a relay to the
original tool. Connect a tool once, then sync from it whenever you want fresh
material.

In MCP terms, this is OneLamp acting as a **client** connecting *out* to your
other servers — the mirror image of your AI tools connecting *in* to OneLamp.

## How it works

<Steps>
  <Step title="Connect">
    `sources(action: "connect")` registers an upstream MCP server by URL. If it
    needs OAuth, the tool returns an authorization URL to open once.
  </Step>

  <Step title="Discover">
    `sources(action: "list")` lists your connected servers, their connection
    state, and the tools each one exposes.
  </Step>

  <Step title="Sync">
    `sources(action: "sync")` calls a tool on a data source (e.g. a search or
    get-page tool) and ingests its text output as a Library source — compiled into
    pages in the background.
  </Step>
</Steps>

Each user's outbound connections and their OAuth tokens live in that user's own
isolated agent — they aren't shared, and they're scoped to you.

## Untrusted by default

Data sources are treated as **untrusted**. Their output is filed as *source
data* to be compiled — it is never followed as instructions and can't redirect
your AI tool's behavior or escalate access.

<Warning>
  Only connect MCP servers you trust to read documents from. A data source's tool
  output becomes Library source material; OneLamp ingests it as data, never as
  commands.
</Warning>

## Example

```text theme={null}
sources(action: "connect", name: "notion", url: "https://mcp.notion.com/mcp")
  → returns an authorization URL → you authorize once

sources(action: "list")
  → notion (id: ...) → tools: search, fetch

sources(action: "sync", server_id: "...", tool: "search", args: { query: "roadmap" })
  → ingests the results into your Library
```

<Note>
  For exact parameters and return shapes, see the
  [data source tools reference](/tools/data-sources).
</Note>
