
Overview
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. This document outlines the setup process and provides a basic example of using the client.
Ingest anything from Slack, Discord, websites, Google Drive, email, Jira, Linear or GitHub into a Graphlit project - and then search and retrieve relevant knowledge within an MCP client like Cursor, Windsurf or Cline.
Documents (PDF, DOCX, PPTX, etc.) and HTML web pages will be extracted to Markdown upon ingestion.
Audio and video files will be transcribed upon ingestion.
Web crawling and web search are built-in as MCP tools, with no need to integrate other tools like Firecrawl, Exa, etc. separately.
You can read more about the MCP Server use cases and features on our blog.
Retrieval
- Query Contents
- Query Collections
- Retrieve Relevant Sources
- Retrieve Similar Images
- Visually Describe Image
- Extract Structured JSON from Text
Ingestion
- Files
- Web Pages
- Messages
- Posts
- Emails
- Issues
- Text
Data Connectors
- Microsoft Outlook email
- Google Mail
- Notion
- Reddit
- Linear
- Jira
- GitHub Issues
- Google Drive
- OneDrive
- SharePoint
- Dropbox
- Box
- GitHub
- Slack
- Microsoft Teams
- Discord
- Twitter/X
- Podcasts (RSS)
Web
- Web Crawling
- Web Search (including Podcast Search)
- Web Mapping
- Screenshot Page
Notifications
Operations
- Configure Project
- Create Collection
- Add Contents to Collection
- Remove Contents from Collection
- Delete Collection
- Delete Feed(s)
- Delete Content(s)
- Is Feed Done?
- Is Content Done?
Enumerations
- List Slack Channels
- List Microsoft Teams Teams
- List Microsoft Teams Channels
- List SharePoint Libraries
- List SharePoint Folders
- List Linear Projects
Resources
- Project
- Contents
- Feeds
- Collections (of Content)
- Workflows
- Specifications
Prerequisites
Before you begin, ensure you have the following:
- Node.js installed on your system (recommended version 18.x or higher).
- An active account on the Graphlit Platform with access to the API settings dashboard.
Configuration
The Graphlit MCP Server supports environment variables to be set for authentication and configuration:
GRAPHLIT_ENVIRONMENT_ID
: Your environment ID.
GRAPHLIT_ORGANIZATION_ID
: Your organization ID.
GRAPHLIT_JWT_SECRET
: Your JWT secret for signing the JWT token.
You can find these values in the API settings dashboard on the Graphlit Platform.
Installation
Installing via Windsurf
To install graphlit-mcp-server in Windsurf IDE application, Cline should use NPX:
npx -y graphlit-mcp-server
Your mcp_config.json file should be configured similar to:
{
"mcpServers": {
"graphlit-mcp-server": {
"command": "npx",
"args": [
"-y",
"graphlit-mcp-server"
],
"env": {
"GRAPHLIT_ORGANIZATION_ID": "your-organization-id",
"GRAPHLIT_ENVIRONMENT_ID": "your-environment-id",
"GRAPHLIT_JWT_SECRET": "your-jwt-secret",
}
}
}
}
Installing via Cline
To install graphlit-mcp-server in Cline IDE application, Cline should use NPX:
npx -y graphlit-mcp-server
Your cline_mcp_settings.json file should be configured similar to:
{
"mcpServers": {
"graphlit-mcp-server": {
"command": "npx",
"args": [
"-y",
"graphlit-mcp-server"
],
"env": {
"GRAPHLIT_ORGANIZATION_ID": "your-organization-id",
"GRAPHLIT_ENVIRONMENT_ID": "your-environment-id",
"GRAPHLIT_JWT_SECRET": "your-jwt-secret",
}
}
}
}
Installing via Cursor
To install graphlit-mcp-server in Cursor IDE application, Cline should use NPX:
npx -y graphlit-mcp-server
Your mcp.json file should be configured similar to:
{
"mcpServers": {
"graphlit-mcp-server": {
"command": "npx",
"args": [
"-y",
"graphlit-mcp-server"
],
"env": {
"GRAPHLIT_ORGANIZATION_ID": "your-organization-id",
"GRAPHLIT_ENVIRONMENT_ID": "your-environment-id",
"GRAPHLIT_JWT_SECRET": "your-jwt-secret",
}
}
}
}
Installing via Smithery
To install graphlit-mcp-server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @graphlit/graphlit-mcp-server --client claude
Installing manually
To use the Graphlit MCP Server in any MCP client application, use:
{
"mcpServers": {
"graphlit-mcp-server": {
"command": "npx",
"args": [
"-y",
"graphlit-mcp-server"
],
"env": {
"GRAPHLIT_ORGANIZATION_ID": "your-organization-id",
"GRAPHLIT_ENVIRONMENT_ID": "your-environment-id",
"GRAPHLIT_JWT_SECRET": "your-jwt-secret",
}
}
}
}
Optionally, you can configure the credentials for data connectors, such as Slack, Google Email and Notion.
Only GRAPHLIT_ORGANIZATION_ID, GRAPHLIT_ENVIRONMENT_ID and GRAPHLIT_JWT_SECRET are required.
{
"mcpServers": {
"graphlit-mcp-server": {
"command": "npx",
"args": [
"-y",
"graphlit-mcp-server"
],
"env": {
"GRAPHLIT_ORGANIZATION_ID": "your-organization-id",
"GRAPHLIT_ENVIRONMENT_ID": "your-environment-id",
"GRAPHLIT_JWT_SECRET": "your-jwt-secret",
"SLACK_BOT_TOKEN": "your-slack-bot-token",
"DISCORD_BOT_TOKEN": "your-discord-bot-token",
"TWITTER_TOKEN": "your-twitter-token",
"GOOGLE_EMAIL_REFRESH_TOKEN": "your-google-refresh-token",
"GOOGLE_EMAIL_CLIENT_ID": "your-google-client-id",
"GOOGLE_EMAIL_CLIENT_SECRET": "your-google-client-secret",
"LINEAR_API_KEY": "your-linear-api-key",
"GITHUB_PERSONAL_ACCESS_TOKEN": "your-github-pat",
"JIRA_EMAIL": "your-jira-email",
"JIRA_TOKEN": "your-jira-token",
"NOTION_API_KEY": "your-notion-api-key",
"NOTION_DATABASE_ID": "your-notion-database-id"
}
}
}
}
Support
Please refer to the Graphlit API Documentation.
For support with the Graphlit MCP Server, please submit a GitHub Issue.
For further support with the Graphlit Platform, please join our Discord community.
[
{
"description": "Retrieve relevant content sources from Graphlit knowledge base. Do *not* use for retrieving content by content identifier - retrieve content resource instead, with URI 'contents://{id}'.n Accepts a search prompt, optional recency filter (defaults to all time), and optional content type and file type filters.n Also accepts optional feed and collection identifiers to filter content by.n Prompt should be optimized for vector search, via text embeddings. Rewrite prompt as appropriate for higher relevance to search results.n Returns the ranked content sources, including their content resource URI to retrieve the complete Markdown text.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"collections": {
"description": "Collection identifiers to filter content by, optional.",
"items": {
"type": "string"
},
"type": "array"
},
"contentType": {
"description": "Content type filter, optional. One of: Email, Event, File, Issue, Message, Page, Post, Text.",
"enum": [
"EMAIL",
"EVENT",
"FILE",
"ISSUE",
"MESSAGE",
"PAGE",
"POST",
"TEXT"
],
"type": "string"
},
"feeds": {
"description": "Feed identifiers to filter content by, optional.",
"items": {
"type": "string"
},
"type": "array"
},
"fileType": {
"description": "File type filter, optional. One of: Animation, Audio, Code, Data, Document, Drawing, Email, Geometry, Image, Package, PointCloud, Shape, Video.",
"enum": [
"ANIMATION",
"AUDIO",
"CODE",
"DATA",
"DOCUMENT",
"DRAWING",
"EMAIL",
"GEOMETRY",
"IMAGE",
"MANIFEST",
"PACKAGE",
"POINT_CLOUD",
"SHAPE",
"UNKNOWN",
"VIDEO"
],
"type": "string"
},
"inLast": {
"description": "Recency filter for content 'in last' timespan, optional. Should be ISO 8601 format, for example, 'PT1H' for last hour, 'P1D' for last day, 'P7D' for last week, 'P30D' for last month. Doesn't support weeks or months explicitly.",
"type": "string"
},
"prompt": {
"description": "Search prompt for content retrieval.",
"type": "string"
}
},
"required": [
"prompt"
],
"type": "object"
},
"name": "retrieveSources"
},
{
"description": "Extracts JSON data from text using LLM.n Accepts text to be extracted, and JSON schema which describes the data which will be extracted. JSON schema needs be of type 'object' and include 'properties' and 'required' fields.n Optionally accepts text prompt which is provided to LLM to guide data extraction. Defaults to 'Extract data using the tools provided'.n Returns extracted JSON from text.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"prompt": {
"description": "Text prompt which is provided to LLM to guide data extraction, optional.",
"type": "string"
},
"schema": {
"description": "JSON schema which describes the data which will be extracted. JSON schema needs be of type 'object' and include 'properties' and 'required' fields.",
"type": "string"
},
"text": {
"description": "Text to be extracted with LLM.",
"type": "string"
}
},
"required": [
"text",
"schema"
],
"type": "object"
},
"name": "extractText"
},
{
"description": "Create a collection.n Accepts a collection name, and optional list of content identifiers to add to collection.n Returns the collection identifier",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"contents": {
"description": "Content identifiers to add to collection, optional.",
"items": {
"type": "string"
},
"type": "array"
},
"name": {
"description": "Collection name.",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "createCollection"
},
{
"description": "Add contents to a collection.n Accepts a collection identifier and a list of content identifiers to add to collection.n Returns the collection identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"contents": {
"description": "Content identifiers to add to collection.",
"items": {
"type": "string"
},
"type": "array"
},
"id": {
"description": "Collection identifier.",
"type": "string"
}
},
"required": [
"id",
"contents"
],
"type": "object"
},
"name": "addContentsToCollection"
},
{
"description": "Remove contents from collection.n Accepts a collection identifier and a list of content identifiers to remove from collection.n Returns the collection identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"contents": {
"description": "Content identifiers to remove from collection.",
"items": {
"type": "string"
},
"type": "array"
},
"id": {
"description": "Collection identifier.",
"type": "string"
}
},
"required": [
"id",
"contents"
],
"type": "object"
},
"name": "removeContentsFromCollection"
},
{
"description": "Delete a collection. Does *not* delete the content in the collection.n Accepts a collection identifier.n Returns the collection identifier and collection state, i.e. Deleted.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"id": {
"description": "Collection identifier.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "deleteCollection"
},
{
"description": "Delete a feed and all of its ingested content.n Accepts a feed identifier which was returned from one of the ingestion tools, like ingestGoogleDriveFiles.n Content deletion will happen asynchronously.n Returns the feed identifier and feed state, i.e. Deleted.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"id": {
"description": "Feed identifier.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "deleteFeed"
},
{
"description": "Delete content.n Accepts a content identifier.n Returns the content identifier and content state, i.e. Deleted.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"id": {
"description": "Content identifier.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "deleteContent"
},
{
"description": "Deletes contents from Graphlit knowledge base.n Accepts optional content type and file type filters to limit the contents which will be deleted.n Also accepts optional limit of how many contents to delete, defaults to 1000.n Returns the content identifiers and content state, i.e. Deleted.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"contentType": {
"description": "Content type filter, optional. One of: Email, Event, File, Issue, Message, Page, Post, Text.",
"enum": [
"EMAIL",
"EVENT",
"FILE",
"ISSUE",
"MESSAGE",
"PAGE",
"POST",
"TEXT"
],
"type": "string"
},
"fileType": {
"description": "File type filter, optional. One of: Animation, Audio, Code, Data, Document, Drawing, Email, Geometry, Image, Package, PointCloud, Shape, Video.",
"enum": [
"ANIMATION",
"AUDIO",
"CODE",
"DATA",
"DOCUMENT",
"DRAWING",
"EMAIL",
"GEOMETRY",
"IMAGE",
"MANIFEST",
"PACKAGE",
"POINT_CLOUD",
"SHAPE",
"UNKNOWN",
"VIDEO"
],
"type": "string"
},
"limit": {
"default": 1000,
"type": "number"
}
},
"type": "object"
},
"name": "deleteContents"
},
{
"description": "Deletes feeds from Graphlit knowledge base.n Accepts optional feed type filter to limit the feeds which will be deleted.n Also accepts optional limit of how many feeds to delete, defaults to 100.n Returns the feed identifiers and feed state, i.e. Deleted.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"feedType": {
"description": "Feed type filter, optional. One of: Discord, Email, Intercom, Issue, MicrosoftTeams, Notion, Reddit, Rss, Search, Site, Slack, Web, YouTube, Zendesk.",
"enum": [
"DISCORD",
"EMAIL",
"INTERCOM",
"ISSUE",
"MICROSOFT_TEAMS",
"NOTION",
"REDDIT",
"RSS",
"SEARCH",
"SITE",
"SLACK",
"WEB",
"YOU_TUBE",
"ZENDESK"
],
"type": "string"
},
"limit": {
"default": 100,
"type": "number"
}
},
"type": "object"
},
"name": "deleteFeeds"
},
{
"description": "Check if content has completed asynchronous ingestion.n Accepts a content identifier which was returned from one of the non-feed ingestion tools, like ingestUrl.n Returns whether the content is done or not.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"id": {
"description": "Content identifier.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "isContentDone"
},
{
"description": "Check if an asynchronous feed has completed ingesting all the available content.n Accepts a feed identifier which was returned from one of the ingestion tools, like ingestGoogleDriveFiles.n Returns whether the feed is done or not.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"id": {
"description": "Feed identifier.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "isFeedDone"
},
{
"description": "Lists available Microsoft Teams teams.n Returns a list of Microsoft Teams teams, where the team identifier can be used with listMicrosoftTeamsChannels to enumerate Microsoft Teams channels.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "listMicrosoftTeamsTeams"
},
{
"description": "Lists available Microsoft Teams channels.n Returns a list of Microsoft Teams channels, where the channel identifier can be used with ingestMicrosoftTeamsMessages to ingest messages into Graphlit knowledge base.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"teamId": {
"type": "string"
}
},
"required": [
"teamId"
],
"type": "object"
},
"name": "listMicrosoftTeamsChannels"
},
{
"description": "Lists available Slack channels.n Returns a list of Slack channels, where the channel name can be used with ingestSlackMessages to ingest messages into Graphlit knowledge base.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "listSlackChannels"
},
{
"description": "Lists available SharePoint libraries.n Returns a list of SharePoint libraries, where the selected libraryId can be used with listSharePointFolders to enumerate SharePoint folders in a library.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "listSharePointLibraries"
},
{
"description": "Lists available SharePoint folders.n Returns a list of SharePoint folders, which can be used with ingestSharePointFiles to ingest files into Graphlit knowledge base.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"libraryId": {
"type": "string"
}
},
"required": [
"libraryId"
],
"type": "object"
},
"name": "listSharePointFolders"
},
{
"description": "Ingests files from SharePoint library into Graphlit knowledge base.n Accepts a SharePoint libraryId and an optional folderId to ingest files from a specific SharePoint folder.n Libraries can be enumerated with listSharePointLibraries and library folders with listSharePointFolders.n Accepts an optional read limit for the number of files to ingest.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"folderId": {
"type": "string"
},
"libraryId": {
"type": "string"
},
"readLimit": {
"description": "Number of files to ingest, optional. Defaults to 100.",
"type": "number"
}
},
"required": [
"libraryId"
],
"type": "object"
},
"name": "ingestSharePointFiles"
},
{
"description": "Ingests files from OneDrive folder into Graphlit knowledge base.n Accepts an optional read limit for the number of files to ingest.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"readLimit": {
"description": "Number of files to ingest, optional. Defaults to 100.",
"type": "number"
}
},
"type": "object"
},
"name": "ingestOneDriveFiles"
},
{
"description": "Ingests files from Google Drive folder into Graphlit knowledge base.n Accepts an optional read limit for the number of files to ingest.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"readLimit": {
"description": "Number of files to ingest, optional. Defaults to 100.",
"type": "number"
}
},
"type": "object"
},
"name": "ingestGoogleDriveFiles"
},
{
"description": "Ingests files from Dropbox folder into Graphlit knowledge base.n Accepts optional relative path to Dropbox folder (i.e. /Pictures), and an optional read limit for the number of files to ingest.n If no path provided, ingests files from root Dropbox folder.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"path": {
"type": "string"
},
"readLimit": {
"description": "Number of files to ingest, optional. Defaults to 100.",
"type": "number"
}
},
"type": "object"
},
"name": "ingestDropboxFiles"
},
{
"description": "Ingests files from Box folder into Graphlit knowledge base.n Accepts optional Box folder identifier, and an optional read limit for the number of files to ingest.n If no folder identifier provided, ingests files from root Box folder (i.e. "0").n Folder identifier can be inferred from Box URL. https://app.box.com/folder/123456 -> folder identifier is "123456".n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"folderId": {
"default": "0",
"type": "string"
},
"readLimit": {
"description": "Number of files to ingest, optional. Defaults to 100.",
"type": "number"
}
},
"type": "object"
},
"name": "ingestBoxFiles"
},
{
"description": "Ingests files from GitHub repository into Graphlit knowledge base.n Accepts GitHub repository owner and repository name and an optional read limit for the number of files to ingest.n For example, for GitHub repository (https://github.com/openai/tiktoken), 'openai' is the repository owner, and 'tiktoken' is the repository name.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"readLimit": {
"description": "Number of files to ingest, optional. Defaults to 100.",
"type": "number"
},
"repositoryName": {
"description": "GitHub repository name.",
"type": "string"
},
"repositoryOwner": {
"description": "GitHub repository owner.",
"type": "string"
}
},
"required": [
"repositoryName",
"repositoryOwner"
],
"type": "object"
},
"name": "ingestGitHubFiles"
},
{
"description": "Ingests pages from Notion database into Graphlit knowledge base.n Accepts an optional read limit for the number of messages to ingest.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"readLimit": {
"description": "Number of pages to ingest, optional. Defaults to 100.",
"type": "number"
}
},
"type": "object"
},
"name": "ingestNotionPages"
},
{
"description": "Ingests messages from Microsoft Teams channel into Graphlit knowledge base.n Accepts Microsoft Teams team identifier and channel identifier, and an optional read limit for the number of messages to ingest.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"channelId": {
"type": "string"
},
"readLimit": {
"description": "Number of messages to ingest, optional. Defaults to 100.",
"type": "number"
},
"teamId": {
"type": "string"
}
},
"required": [
"teamId",
"channelId"
],
"type": "object"
},
"name": "ingestMicrosoftTeamsMessages"
},
{
"description": "Ingests messages from Slack channel into Graphlit knowledge base.n Accepts Slack channel name and an optional read limit for the number of messages to ingest.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"channelName": {
"type": "string"
},
"readLimit": {
"description": "Number of messages to ingest, optional. Defaults to 100.",
"type": "number"
}
},
"required": [
"channelName"
],
"type": "object"
},
"name": "ingestSlackMessages"
},
{
"description": "Ingests messages from Discord channel into Graphlit knowledge base.n Accepts Discord channel name and an optional read limit for the number of messages to ingest.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"channelName": {
"type": "string"
},
"readLimit": {
"description": "Number of messages to ingest, optional. Defaults to 100.",
"type": "number"
}
},
"required": [
"channelName"
],
"type": "object"
},
"name": "ingestDiscordMessages"
},
{
"description": "Ingests posts from Reddit subreddit into Graphlit knowledge base.n Accepts a subreddit name and an optional read limit for the number of posts to ingest.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"readLimit": {
"description": "Number of posts to ingest, optional. Defaults to 100.",
"type": "number"
},
"subredditName": {
"type": "string"
}
},
"required": [
"subredditName"
],
"type": "object"
},
"name": "ingestRedditPosts"
},
{
"description": "Ingests emails from Google Email account into Graphlit knowledge base.n Accepts an optional read limit for the number of emails to ingest.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"readLimit": {
"description": "Number of emails to ingest, optional. Defaults to 100.",
"type": "number"
}
},
"type": "object"
},
"name": "ingestGoogleEmail"
},
{
"description": "Ingests emails from Microsoft Email account into Graphlit knowledge base.n Accepts an optional read limit for the number of emails to ingest.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"readLimit": {
"description": "Number of emails to ingest, optional. Defaults to 100.",
"type": "number"
}
},
"type": "object"
},
"name": "ingestMicrosoftEmail"
},
{
"description": "Ingests issues from Linear project into Graphlit knowledge base.n Accepts Linear project name and an optional read limit for the number of issues to ingest.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"projectName": {
"type": "string"
},
"readLimit": {
"description": "Number of issues to ingest, optional. Defaults to 100.",
"type": "number"
}
},
"required": [
"projectName"
],
"type": "object"
},
"name": "ingestLinearIssues"
},
{
"description": "Ingests issues from GitHub repository into Graphlit knowledge base.n Accepts GitHub repository owner and repository name and an optional read limit for the number of issues to ingest.n For example, for GitHub repository (https://github.com/openai/tiktoken), 'openai' is the repository owner, and 'tiktoken' is the repository name.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"readLimit": {
"description": "Number of issues to ingest, optional. Defaults to 100.",
"type": "number"
},
"repositoryName": {
"description": "GitHub repository name.",
"type": "string"
},
"repositoryOwner": {
"description": "GitHub repository owner.",
"type": "string"
}
},
"required": [
"repositoryName",
"repositoryOwner"
],
"type": "object"
},
"name": "ingestGitHubIssues"
},
{
"description": "Ingests issues from Atlassian Jira repository into Graphlit knowledge base.n Accepts Atlassian Jira server URL and project name, and an optional read limit for the number of issues to ingest.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"projectName": {
"type": "string"
},
"readLimit": {
"description": "Number of issues to ingest, optional. Defaults to 100.",
"type": "number"
},
"url": {
"type": "string"
}
},
"required": [
"url",
"projectName"
],
"type": "object"
},
"name": "ingestJiraIssues"
},
{
"description": "Crawls web pages from web site into Graphlit knowledge base.n Accepts a URL and an optional read limit for the number of pages to crawl.n Uses sitemap.xml to discover pages to be crawled from website.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"readLimit": {
"description": "Number of web pages to ingest, optional. Defaults to 100.",
"type": "number"
},
"url": {
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "webCrawl"
},
{
"description": "Enumerates the web pages at or beneath the provided URL using web sitemap. n Does *not* ingest web pages into Graphlit knowledge base.n Accepts web page URL as string.n Returns list of mapped URIs from web site.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"url": {
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "webMap"
},
{
"description": "Performs web search based on search query. Format the search query as what would be entered into a Google search.n Prefer calling this tool over using 'curl' directly for any web search.n Does *not* ingest pages into Graphlit knowledge base.n Accepts search query as string, and optional search service type.n Can search for web pages, podcasts, videos, images, news, or shopping.n Search service types: Tavily, Exa. Defaults to Tavily.n Returns URL, title and relevant Markdown text from resulting web pages.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"search": {
"type": "string"
},
"searchService": {
"default": "TAVILY",
"enum": [
"EXA",
"TAVILY"
],
"type": "string"
}
},
"required": [
"search"
],
"type": "object"
},
"name": "webSearch"
},
{
"description": "Ingests posts from RSS feed into Graphlit knowledge base.n For podcast RSS feeds, audio will be downloaded, transcribed and ingested into Graphlit knowledge base.n Accepts RSS URL and an optional read limit for the number of posts to read.n Executes asynchronously and returns the feed identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"readLimit": {
"description": "Number of issues to posts, optional. Defaults to 25.",
"type": "number"
},
"url": {
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "ingestRSS"
},
{
"description": "Ingests content from URL into Graphlit knowledge base.n Can scrape web pages, and can ingest individual Word documents, PDFs, audio recordings, videos, images, or any other unstructured data.n Executes asynchronously and returns the content identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"url": {
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "ingestUrl"
},
{
"description": "Ingests text as content into Graphlit knowledge base.n Accepts a name for the content object, the text itself, and an optional text type (Plain, Markdown, Html). Defaults to Markdown text type.n Can use for storing long-term textual memories or the output from LLM or other tools as content resources, which can be later searched or retrieved.n Executes *synchronously* and returns the content identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"text": {
"type": "string"
},
"textType": {
"default": "MARKDOWN",
"enum": [
"HTML",
"MARKDOWN",
"PLAIN"
],
"type": "string"
}
},
"required": [
"name",
"text"
],
"type": "object"
},
"name": "ingestText"
},
{
"description": "Ingests local file into Graphlit knowledge base.n Accepts the path to the file in the local filesystem.n Executes asynchronously and returns the content identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"filePath": {
"type": "string"
}
},
"required": [
"filePath"
],
"type": "object"
},
"name": "ingestFile"
},
{
"description": "Screenshots web page from URL.n Executes asynchronously and returns the content identifier.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"url": {
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "screenshotPage"
},
{
"description": "Prompts vision LLM and returns completion. n Does *not* ingest image into Graphlit knowledge base.n Accepts image URL as string.n Returns Markdown text from LLM completion.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"prompt": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"prompt",
"url"
],
"type": "object"
},
"name": "describeImage"
},
{
"description": "Prompts vision LLM and returns description of image content. n Accepts content identifier as string, and optional prompt for image description.n Returns Markdown text from LLM completion.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"id": {
"type": "string"
},
"prompt": {
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "describeContent"
}
]