From 343f1b7bbc6ee1e1cda48fda2da611622c0d00bc Mon Sep 17 00:00:00 2001 From: Aleksandar Krsteski Date: Thu, 12 Mar 2026 15:27:05 +0100 Subject: [PATCH 1/2] Add Confluence connector docs and config example (MAIT-111) - Add Confluence connector section to README with all discovery modes and auth strategies - Add Confluence to included connectors list - Update config.yaml.example with all 4 Confluence connector mode blocks - Update .env.rag.example with CONFLUENCE1_* vars Co-Authored-By: Claude Sonnet 4.6 --- .env.rag.example | 11 +++++ README.md | 103 ++++++++++++++++++++++++++++++++++++++++---- config.yaml.example | 48 +++++++++++++++++++++ 3 files changed, 154 insertions(+), 8 deletions(-) diff --git a/.env.rag.example b/.env.rag.example index eb3ae47..cae8580 100644 --- a/.env.rag.example +++ b/.env.rag.example @@ -79,3 +79,14 @@ S3_ACCOUNT1_SCHEDULES= #WEB2_SITEMAP_URL=https://example.com/sitemap.xml #WEB2_INCLUDE_PREFIX=/blog/ #WEB2_SCHEDULES=60 + +# CONFLUENCE CONNECTORS (optional): + +#CONFLUENCE1_BASE_URL=https://yoursite.atlassian.net/wiki +#CONFLUENCE1_USERNAME=you@example.com +#CONFLUENCE1_API_TOKEN=your-api-token +#CONFLUENCE1_SPACE_KEY=ENG +#CONFLUENCE1_PAGE_IDS=123456,789012 +#CONFLUENCE1_PAGE_LABEL=meeting-notes +#CONFLUENCE1_CQL=space = 'ENG' AND type = page +#CONFLUENCE1_SCHEDULES=3600 diff --git a/README.md b/README.md index a6ca708..3fa1e22 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ ![mAItion](https://github.com/WikiTeq/mAItion/blob/main/mAItion.png?raw=true) -mAItion is an all-in-one ready-to-use AI-powered tool that combines your existing knowledge with LLMs, +mAItion is an all-in-one ready-to-use AI-powered tool that combines your existing knowledge with LLMs, allowing you to chat, search and interact with your data through a slick chat interface. With mAItion -you can aggregate all your knowledge from many sources using Connectors into a central place and +you can aggregate all your knowledge from many sources using Connectors into a central place and interact with your knowledge with ease! ## ✨ Features @@ -33,13 +33,14 @@ interact with your knowledge with ease! * A tool to find secret knowledge that can not be found in the other was across your scattered data * An entry-point into your on-premise hosted LLM models supporting evaluations and per-model settings -### 🌐 Connectors included +### Connectors included * S3 (any AWS compatible Object Storage including AWS, Contabo, B2, Cloudflare R2, OVH, etc) * MediaWiki (all versions supported, both private and public wiki) * SerpAPI +* Confluence (Cloud and Server/Data Center) -### 🌐 Extra connectors +### Extra connectors Over 100 extra connectors are available at request, including the most popular ones: @@ -127,7 +128,6 @@ The connector has the following configuration options: # config.yaml sources: - - - type: "s3" # must be s3 name: "account1" # arbitrary name for the connector, will be stored in metadata config: @@ -138,7 +138,7 @@ sources: use_ssl: "${S3_ACCOUNT1_USE_SSL}" # use ssl for s3 connection, can be True or False buckets: "${S3_ACCOUNT1_BUCKETS}" # single entry or comma-separated list i.e. bucket1,bucket2 schedules: "${S3_ACCOUNT1_SCHEDULES}" # single entry or comma-separated list i.e. 3600,60 - + - type: "s3" name: "account2" config: @@ -199,7 +199,7 @@ MEDIAWIKI1_SCHEDULES=3600 # Only needed for private wikis requiring login: #MEDIAWIKI1_USERNAME=your-bot-username #MEDIAWIKI1_PASSWORD=your-bot-password -```` +``` ### SerpAPI Connector @@ -232,7 +232,7 @@ sources: SERPAPI1_KEY=xxxx SERPAPI1_QUERIES=aaa SERPAPI1_SCHEDULES=3600 -```` +``` ### Web Connector @@ -272,6 +272,93 @@ WEB2_INCLUDE_PREFIX=/blog/ WEB2_SCHEDULES=60 ``` +### Confluence Connector + +The Confluence connector ingests pages from Atlassian Confluence Cloud or Server/Data Center. +It supports 5 discovery modes and 3 authentication strategies. + +**Discovery modes** (exactly one required): + +| Mode | Config key | Description | +|------|-----------|-------------| +| Space | `space_key` | All pages in a space | +| Page IDs | `page_ids` | Comma-separated list of page IDs | +| Label | `page_label` | All pages with a given label | +| CQL | `cql` | Arbitrary CQL query | +| Folder | `folder_id` | All pages inside a folder | + +**Auth strategies** (mutually exclusive): + +| Strategy | Keys | Use case | +|----------|------|----------| +| Cloud basic | `username` + `api_token` | Confluence Cloud (recommended) | +| Server basic | `username` + `password` | Confluence Server / Data Center | +| Bearer token | `api_token` only | Server/DC Personal Access Token | + +```yaml +# config.yaml + +sources: + # mode: space_key — all pages in a space + - type: "confluence" + name: "confluence1" + config: + base_url: "${CONFLUENCE1_BASE_URL}" + username: "${CONFLUENCE1_USERNAME}" + api_token: "${CONFLUENCE1_API_TOKEN}" + space_key: "${CONFLUENCE1_SPACE_KEY}" + page_status: "current" # optional: filter by status + max_pages: 50 + schedules: "${CONFLUENCE1_SCHEDULES}" + + # mode: page_ids — specific pages by ID + - type: "confluence" + name: "confluence2" + config: + base_url: "${CONFLUENCE1_BASE_URL}" + username: "${CONFLUENCE1_USERNAME}" + api_token: "${CONFLUENCE1_API_TOKEN}" + page_ids: "${CONFLUENCE1_PAGE_IDS}" # comma-separated IDs + include_children: false # optional: include child pages + max_pages: 50 + schedules: "${CONFLUENCE1_SCHEDULES}" + + # mode: page_label — pages tagged with a label + - type: "confluence" + name: "confluence3" + config: + base_url: "${CONFLUENCE1_BASE_URL}" + username: "${CONFLUENCE1_USERNAME}" + api_token: "${CONFLUENCE1_API_TOKEN}" + page_label: "${CONFLUENCE1_PAGE_LABEL}" + max_pages: 50 + schedules: "${CONFLUENCE1_SCHEDULES}" + + # mode: cql — arbitrary CQL query + - type: "confluence" + name: "confluence4" + config: + base_url: "${CONFLUENCE1_BASE_URL}" + username: "${CONFLUENCE1_USERNAME}" + api_token: "${CONFLUENCE1_API_TOKEN}" + cql: "${CONFLUENCE1_CQL}" + max_pages: 50 + schedules: "${CONFLUENCE1_SCHEDULES}" +``` + +```dotenv +# .env.rag + +CONFLUENCE1_BASE_URL=https://yoursite.atlassian.net/wiki +CONFLUENCE1_USERNAME=you@example.com +CONFLUENCE1_API_TOKEN=your-api-token +CONFLUENCE1_SPACE_KEY=ENG +CONFLUENCE1_PAGE_IDS=123456,789012 +CONFLUENCE1_PAGE_LABEL=meeting-notes +CONFLUENCE1_CQL=space = 'ENG' AND type = page +CONFLUENCE1_SCHEDULES=3600 +``` + ## Embeddings and Inference ### Embeddings support diff --git a/config.yaml.example b/config.yaml.example index 1b94b00..1b0413e 100644 --- a/config.yaml.example +++ b/config.yaml.example @@ -64,6 +64,54 @@ sources: # html_to_text: true # schedules: "${WEB2_SCHEDULES}" + # CONFLUENCE CONNECTOR: + + # mode: space_key + #- type: "confluence" + # name: "confluence1" + # config: + # base_url: "${CONFLUENCE1_BASE_URL}" + # username: "${CONFLUENCE1_USERNAME}" + # api_token: "${CONFLUENCE1_API_TOKEN}" + # space_key: "${CONFLUENCE1_SPACE_KEY}" + # page_status: "current" + # max_pages: 50 + # schedules: "${CONFLUENCE1_SCHEDULES}" + + # mode: page_ids + #- type: "confluence" + # name: "confluence2" + # config: + # base_url: "${CONFLUENCE1_BASE_URL}" + # username: "${CONFLUENCE1_USERNAME}" + # api_token: "${CONFLUENCE1_API_TOKEN}" + # page_ids: "${CONFLUENCE1_PAGE_IDS}" + # include_children: false + # max_pages: 50 + # schedules: "${CONFLUENCE1_SCHEDULES}" + + # mode: page_label + #- type: "confluence" + # name: "confluence3" + # config: + # base_url: "${CONFLUENCE1_BASE_URL}" + # username: "${CONFLUENCE1_USERNAME}" + # api_token: "${CONFLUENCE1_API_TOKEN}" + # page_label: "${CONFLUENCE1_PAGE_LABEL}" + # max_pages: 50 + # schedules: "${CONFLUENCE1_SCHEDULES}" + + # mode: cql + #- type: "confluence" + # name: "confluence4" + # config: + # base_url: "${CONFLUENCE1_BASE_URL}" + # username: "${CONFLUENCE1_USERNAME}" + # api_token: "${CONFLUENCE1_API_TOKEN}" + # cql: "${CONFLUENCE1_CQL}" + # max_pages: 50 + # schedules: "${CONFLUENCE1_SCHEDULES}" + embedding: # can be `local` or `openrouter`/`openai` provider: local From ac935b813fcd933b0fdf78885dc96cc30ac828f1 Mon Sep 17 00:00:00 2001 From: Aleksandar Krsteski Date: Fri, 17 Apr 2026 20:06:28 +0200 Subject: [PATCH 2/2] MAIT-111: Add folder_id mode and CONFLUENCE1_PASSWORD to Confluence connector docs --- .env.rag.example | 2 ++ README.md | 13 +++++++++++++ config.yaml.example | 11 +++++++++++ 3 files changed, 26 insertions(+) diff --git a/.env.rag.example b/.env.rag.example index cae8580..33d8f30 100644 --- a/.env.rag.example +++ b/.env.rag.example @@ -85,8 +85,10 @@ S3_ACCOUNT1_SCHEDULES= #CONFLUENCE1_BASE_URL=https://yoursite.atlassian.net/wiki #CONFLUENCE1_USERNAME=you@example.com #CONFLUENCE1_API_TOKEN=your-api-token +#CONFLUENCE1_PASSWORD=your-password # mutually exclusive with API_TOKEN #CONFLUENCE1_SPACE_KEY=ENG #CONFLUENCE1_PAGE_IDS=123456,789012 #CONFLUENCE1_PAGE_LABEL=meeting-notes #CONFLUENCE1_CQL=space = 'ENG' AND type = page +#CONFLUENCE1_FOLDER_ID=12345 #CONFLUENCE1_SCHEDULES=3600 diff --git a/README.md b/README.md index 3fa1e22..3ae48ac 100644 --- a/README.md +++ b/README.md @@ -344,6 +344,17 @@ sources: cql: "${CONFLUENCE1_CQL}" max_pages: 50 schedules: "${CONFLUENCE1_SCHEDULES}" + + # mode: folder_id — all pages inside a folder + - type: "confluence" + name: "confluence5" + config: + base_url: "${CONFLUENCE1_BASE_URL}" + username: "${CONFLUENCE1_USERNAME}" + api_token: "${CONFLUENCE1_API_TOKEN}" + folder_id: "${CONFLUENCE1_FOLDER_ID}" + max_pages: 50 + schedules: "${CONFLUENCE1_SCHEDULES}" ``` ```dotenv @@ -352,10 +363,12 @@ sources: CONFLUENCE1_BASE_URL=https://yoursite.atlassian.net/wiki CONFLUENCE1_USERNAME=you@example.com CONFLUENCE1_API_TOKEN=your-api-token +CONFLUENCE1_PASSWORD=your-password # mutually exclusive with API_TOKEN CONFLUENCE1_SPACE_KEY=ENG CONFLUENCE1_PAGE_IDS=123456,789012 CONFLUENCE1_PAGE_LABEL=meeting-notes CONFLUENCE1_CQL=space = 'ENG' AND type = page +CONFLUENCE1_FOLDER_ID=12345 CONFLUENCE1_SCHEDULES=3600 ``` diff --git a/config.yaml.example b/config.yaml.example index 1b0413e..71824b1 100644 --- a/config.yaml.example +++ b/config.yaml.example @@ -112,6 +112,17 @@ sources: # max_pages: 50 # schedules: "${CONFLUENCE1_SCHEDULES}" + # mode: folder_id + #- type: "confluence" + # name: "confluence5" + # config: + # base_url: "${CONFLUENCE1_BASE_URL}" + # username: "${CONFLUENCE1_USERNAME}" + # api_token: "${CONFLUENCE1_API_TOKEN}" + # folder_id: "${CONFLUENCE1_FOLDER_ID}" + # max_pages: 50 + # schedules: "${CONFLUENCE1_SCHEDULES}" + embedding: # can be `local` or `openrouter`/`openai` provider: local