# Quickstart Source: https://docs.deepvista.ai/cli Install the DeepVista CLI and start capturing knowledge and running AI workflows from your terminal in minutes. ## Install the CLI Run the install script in your terminal. Requires **Python 3.12+**. ```bash theme={null} curl -sSL https://raw.githubusercontent.com/DeepVista-AI/deepvista-cli/main/install.sh | bash ``` If Python 3.12 isn't available on your machine, install it first before running the command above. **Using an AI agent?** Paste this prompt directly into Claude Code, Cursor, or any MCP-compatible agent and it will handle the install for you: ```text theme={null} Install DeepVista CLI. Visit cli.deepvista.ai for docs. Install command: curl -sSL https://raw.githubusercontent.com/DeepVista-AI/deepvista-cli/main/install.sh | bash Requires Python 3.12+. If Python 3.12 isn't available, install it first. After install, run "deepvista auth login" and share the URL with me so I can authenticate. ``` *** ## Authenticate Once installed, log in to connect the CLI to your DeepVista account. ```bash theme={null} deepvista auth login ``` This opens a browser window for authentication. Complete the sign-in and copy the code shown. ```bash theme={null} deepvista auth login --code ``` ```bash theme={null} deepvista auth status ``` You should see your account details confirming a successful connection. *** ## Capture your first note With the CLI installed and authenticated, save an insight to your knowledge base in one line. ```bash theme={null} deepvista notes +quick "Your insight here" ``` **Example:** ```bash theme={null} deepvista notes +quick "Tobi Lütke: the company is a tool to amplify what you love" ``` ```text theme={null} ✓ Note saved to knowledge base id: note_7d3f9a indexed: semantic + full-text ``` Your note is immediately indexed for both semantic and full-text search — ready for your agent to find and synthesize later. *** ## Skills The CLI ships with **8 built-in skills** that install globally to `~/.claude/skills/` and are available in every agent session automatically. | Skill | What it does | | - | - | | `deepvista-shared` | Auth, profiles, global flags, and security rules used across all skills | | `deepvista-memory` | Search, read, create, and update cards in your knowledge base | | `deepvista-notes` | Quick note capture — one-liners or full structured notes, instantly indexed | | `deepvista-recipe` | Run structured AI workflows and stream results live in your terminal | | `deepvista-chat` | Conversational AI agent with full access to your knowledge base context | | `deepvista-persona-knowledge-worker` | Daily knowledge workflow patterns for people who think for a living | | `deepvista-recipe-research-to-recipe` | Full pipeline: search your KB → synthesize → run a Recipe workflow | | `deepvista-recipe-export-knowledge-as-skills` | Turn your own knowledge base into installable, shareable agent skills | *** ## Try a use case Copy any prompt below, paste it into your AI agent (Claude Code, Cursor, etc.), and let DeepVista handle the rest. Build a searchable knowledge base from founder interviews. ```text theme={null} Load skills: deepvista-shared deepvista-notes I just listened to the Lenny's Podcast episode with Brian Chesky about founder mode. Here are my notes: ... Save this to my knowledge base as a note titled "Brian Chesky — Founder Mode". ``` Once you've captured 10–20 notes, ask your agent to find patterns across them. ```text theme={null} Load skills: deepvista-shared deepvista-memory deepvista-recipe deepvista-recipe-research-to-recipe Search for cards about growth and early-stage execution, then find my Research Synthesis recipe and run it focused on: what separates high-growth founders, common 0→1 mistakes. Show me what you find before running. ``` Test new ideas against founder frameworks you've already captured. ```text theme={null} Load skills: deepvista-shared deepvista-memory deepvista-recipe I have a new startup idea to evaluate. Idea: [your idea]. 1. Search my knowledge base for any idea validation frameworks 2. Find my idea evaluation Recipe 3. Run it with the above context — show me the Recipe first ``` *** ## Recipe patterns Build these workflows in the DeepVista web app, then invoke them through your agent with a single prompt. ```text theme={null} Search my memory for [topic] and run my Research Synthesis Recipe ``` ```text theme={null} Evaluate this idea against my founder frameworks: [idea] ``` ```text theme={null} Run my weekly review — surface pinned cards and capture this week's key learnings ``` ```text theme={null} I just finished a user interview. Run my Interview Debrief Recipe with these notes: [notes] ``` ```text theme={null} Help me think through this decision using my knowledge base: [decision] ``` ```text theme={null} Run a competitive analysis on [company/space] using everything I've captured ``` *** ## CLI reference | Command | Description | | - | - | | `deepvista auth login` | Open browser for authentication | | `deepvista auth login --code ` | Paste code from browser | | `deepvista auth status` | Check authentication state | | `deepvista auth logout` | Clear credentials | | Command | Description | | - | - | | `deepvista notes +quick ""` | Capture a quick one-line note | | `deepvista notes create` | Create a note with a title and body | | `deepvista notes list` | List recent notes | | `deepvista card +search "" --type note` | Search notes by keyword or semantic query | | Command | Description | | - | - | | `deepvista card +search ""` | Search context cards semantically | | `deepvista card get ` | Retrieve a specific card by ID | | `deepvista card create` | Create a new context card | | `deepvista card update ` | Update an existing card | | Command | Description | | - | - | | `deepvista skill list` | List available Skills in your project | | `deepvista skill run ` | Run a Skill by ID | | `deepvista skill get ` | Inspect a Skill and its run status | *** ## Uninstall To remove the DeepVista CLI from your system: ```bash theme={null} curl -sSL https://raw.githubusercontent.com/DeepVista-AI/deepvista-cli/main/uninstall.sh | bash ``` *** Want to use DeepVista directly inside Cursor or Claude Desktop? Set up the MCP server to give your AI tools live access to your context cards. # Welcome to DeepVista Source: https://docs.deepvista.ai/index DeepVista turns your GTM busywork into reusable workflows for marketing, sales, and customer success. It closes one continuous growth loop that acquires, engages, and retains your customers. # Core concepts Context card captures **entities.** Every team member, customer, meeting note, file, and session is stored within a context card. VistaBase understands **relationships.** Every time you chat with DeepVista, VistaBase automatically updates its understanding of your GTM busywork into one connected knowledge base. With an accurate understanding, agents **act** on real-time intelligence through a set of defined workflows. WorkBench gives you and your team control in a project. Search context cards, check scheduled jobs, and share knowledge across your team. # How DeepVista works DeepVista turns your unstructured, raw input into context cards. DeepVista creates workflows personalized to how you work, then executes them end-to-end. DeepVista works best when everyone in a project shares knowledge with one another. # Where to start Build your customer growth flywheel. A light Workflow is designed for you to "chat, run, and go", with minimal setup required. # LinkedIn Message Unipile Auto-Response Workflow Source: https://docs.deepvista.ai/linkedin_message_workflow ````text theme={null} # LinkedIn Message Unipile Auto-Response Workflow --- name: workflow-unipile-linkedin-message-response description: "Process Unipile LinkedIn message webhooks, deduplicate replies, analyze follower count, draft non-commitment response, auto-reply via Unipile API, and send email notification." type: workflow execution: stateful inputs: - name: webhook_payload type: object source: user label: "Unipile Webhook Payload" field: textarea required: true placeholder: '{"event": "message_received", "message_id": "msg_XXXXXXXX", "chat_id": "chat_XXXXXXXX", "account_id": "{{UNIPILE_ACCOUNT_ID}}", "sender": {"name": "Jane Doe", "profile_url": "https://linkedin.com/in/janedoe", "followers_count": 15400}, "message": "what time works best"}' help: "Inbound JSON webhook payload from Unipile containing message_id, chat_id, account_id, message, and sender details" - name: unipile_dsn type: string source: user label: "Unipile DSN" required: false placeholder: "apiXX.unipile.com:PORT" help: "Unipile API server host and port (from your Unipile dashboard). Only needed for the direct-API fallback; not required when using the DeepVista MCP send_linkedin_message tool." - name: unipile_api_key type: string source: secret label: "Unipile API Key" required: false help: "Unipile X-API-KEY. Only needed for the direct-API fallback (DeepVista MCP handles credentials server-side). Store as a secret / environment variable (UNIPILE_API_KEY) — never hardcode in this skill." - name: unipile_account_id type: string source: user label: "Unipile Account ID" required: false placeholder: "acct_XXXXXXXX" help: "The Unipile account ID of the LinkedIn account this workflow monitors. If unset, resolve it via DeepVista MCP: search context cards for 'LinkedIn account connected', or run the create_linkedin_auth_link setup flow (see Setup & Prerequisites)." - name: recipient_email type: string source: user label: "Notification Recipient Email" field: email required: true placeholder: "user@example.com" help: "Email address where the confirmation, auto-sent reply, follower count, and thread link will be sent" --- ## Setup & Prerequisites (via DeepVista MCP) Before running the workflow, verify all requirements are satisfied. If anything is missing, use the DeepVista MCP tools to complete the setup **conversationally** — walk the user through it in chat rather than telling them to leave and configure things manually. ### Requirement checklist | Requirement | How to check | How to fix via MCP | |---|---|---| | LinkedIn account connected to Unipile | `search_context_cards` for a card titled "LinkedIn account connected" (tags: `LinkedIn`, `Unipile`) containing `unipile_account_id` | Call `create_linkedin_auth_link` and guide the user through it (see below) | | `unipile_account_id` | Read it from the same context card | Filled automatically once the auth flow completes | | `unipile_dsn` / `unipile_api_key` | Only needed for the raw-curl path (Step 5 fallback); not needed when using MCP tools | Prefer the MCP `send_linkedin_message` tool, which handles credentials server-side — never ask the user to paste an API key into chat | | Notification email | Confirm `recipient_email` with the user | `send_notification_email` needs no setup; `send_email` requires the user's connected Gmail account | ### Connecting LinkedIn through chat If no LinkedIn account is connected yet: 1. Call the DeepVista MCP tool `create_linkedin_auth_link` (optionally passing a `success_redirect_url`). It returns a Unipile **hosted auth URL**. 2. Show the URL to the user and ask them to open it in a browser and sign in to LinkedIn. The connection completes out-of-band — DeepVista is notified via the `account.connected` webhook, which records the new `unipile_account_id` in a context card ("LinkedIn account connected") tied to the user. 3. After the user says they've finished, re-run `search_context_cards` for the connection card to pick up `unipile_account_id`. If it hasn't appeared yet, wait briefly and retry, or ask the user to confirm the browser flow succeeded. 4. Never guess or fabricate an `account_id` — only use one recorded by the webhook or explicitly provided by the user. ### Preferred send path When the DeepVista MCP `send_linkedin_message` tool is available, use it instead of the raw Unipile curl in Step 5 — it sends from the user's connected account using server-side credentials (`account_id`, recipient provider id, message text) and returns `chat_id` / `message_id` for the notification step. Fall back to the direct Unipile API only when the MCP server is unavailable and the user has supplied `unipile_dsn` + `unipile_api_key` as secrets. ## Workflow ```mermaid flowchart TD Input["Input"]:::dvTodo A["1. Receive & Parse Unipile Webhook"]:::dvTodo subgraph rowB [ ] direction TB B["2. Check Reply Status & Deduplicate"]:::dvTodo noteB["Terminated: self-sent message (is_sender: true)"]:::dvNote end C["3. Analyze Message, Profile & Follower Count"]:::dvTodo D["4. Draft Response (No Scheduling/Times)"]:::dvTodo E["5. Post Reply into Existing Chat Thread"]:::dvTodo F["6. Send Confirmation Email & Notify"]:::dvTodo Output["Output"]:::dvTodo Input e0@--> A A e1@--> B B e2@--> C C e3@--> D D e4@--> E E e5@--> F F e6@--> Output e0@{ animation: slow } e1@{ animation: slow } e2@{ animation: slow } e3@{ animation: slow } e4@{ animation: slow } e5@{ animation: slow } e6@{ animation: slow } ```` ## Node Description 1. Receive & Parse Unipile Webhook *Estimated time: \~1 min (from 1 run)* 1. Intercept inbound webhook payload triggered by Unipile on a new LinkedIn message targeting account `{{unipile_account_id}}`. 2. Extract required identifiers: `message_id`, `chat_id` (existing Unipile conversation ID), `account_id`, sender name, LinkedIn profile URL, message text, thread URL, and follower count. 3. Validate presence of `message_id` and `chat_id`. 2. Check Reply Status & Deduplicate *Estimated time: \~1 min (from 5 runs)* 1. Query VistaBase (`database_search` / `search_context_cards`) for existing cards matching `message_id` or `chat_id`. 2. Check if a reply has already been generated or sent for this specific message or thread state. 3. **If already replied or self-sent message**: Terminate workflow execution immediately without drafting or posting a new message to prevent duplicate replies. 3. Analyze Message, Profile & Follower Count *Estimated time: \~1 min (from 3 runs)* 1. Retrieve sender profile metadata to confirm LinkedIn follower count. 2. Search VistaBase (`database_search` / `search_context_cards`) for existing `person` or `organization` context. 3. Determine intent, core questions, and priority tier (e.g. High Priority: >10k followers). 4. Draft Response (No Scheduling/Times) *Estimated time: \~1 min (from 3 runs)* 1. Synthesize a polite, engaging, and professional response aligned with founder tone. 2. **Strict Guardrails & Zero Commitments**: * **No Promises of Meetings**: Do NOT promise a meeting, call, coffee chat, or follow-up conversation. * **No Promises of Collaboration**: Do NOT promise partnerships, joint projects, advisory roles, or investments. * **No Scheduling/Times**: Do NOT offer specific times, suggest scheduling slots, propose PST/EST hours, or share calendar links. 3. Focus purely on acknowledging the message politely, expressing appreciation, or acknowledging key points without making commitments. 4. Construct request payload for Unipile's send-message endpoint (`POST https://{{unipile_dsn}}/api/v1/chats/{chat_id}/messages`). 5. Post Reply into Existing Chat Thread *Estimated time: \~1 min (from 2 runs)* 1. **Preferred**: call the DeepVista MCP tool `send_linkedin_message` with the connected `account_id`, the recipient's provider id, and the drafted text — it returns `chat_id` / `message_id` on success. If no account is connected, run the `create_linkedin_auth_link` setup flow first (see Setup & Prerequisites). 2. **Fallback** (only if the MCP server is unavailable and `unipile_dsn` + `unipile_api_key` are provided): execute a POST request targeting the existing chat thread endpoint: ```yaml theme={null} prompt: | curl --request POST \ --url https://{{unipile_dsn}}/api/v1/chats/{{chat_id}}/messages \ --header "X-API-KEY: $UNIPILE_API_KEY" \ --header 'accept: application/json' \ --header 'content-type: multipart/form-data' \ --form 'text={{generated_reply}}' ``` 3. Confirm success (MCP `status: "sent"` or HTTP 200/201) and capture the returned message ID. 6. Send Confirmation Email & Notify *Estimated time: \~1 min (from 3 runs)* 1. Format notification email summarizing: * **Sender**: Name, LinkedIn profile link, and **Follower Count** * **Thread & Message ID**: `chat_id` / `message_id` * **Status**: Auto-replied directly into existing LinkedIn thread * **Received Message**: Full text of incoming message * **Sent Auto-Reply**: Exact text delivered to LinkedIn * **LinkedIn Thread Link**: Direct link for manual review or follow-up 2. Deliver email to `recipient_email` via `send_email` or `send_notification_email`. 3. Persist a `message` card in VistaBase tagged with `message_id` and `chat_id` to block duplicate future triggers. ```text theme={null} ``` # MCP Server Source: https://docs.deepvista.ai/mcp-server Connect your AI tools (Cursor, Claude Desktop, and more) directly to your DeepVista context cards. The DeepVista MCP server lets any compatible AI client read, search, create, edit, and delete your context cards — without leaving your coding environment or chat interface. All actions are automatically scoped to your **currently active DeepVista project**. No extra configuration needed. MCP (Model Context Protocol) is an open standard for connecting AI clients to external data sources. [Read the spec →](https://modelcontextprotocol.io/specification/2025-03-26) ## Endpoint The MCP server uses **Streamable HTTP transport** with OAuth 2.1 authentication. ```text theme={null} https://api.deepvista.ai/mcp ``` *** ## Setup Add the following to your Cursor MCP config file at `~/.cursor/mcp.json`. Create the file if it doesn't exist. ```json ~/.cursor/mcp.json theme={null} { "mcpServers": { "deepvista": { "url": "https://api.deepvista.ai/mcp" } } } ``` Press `Cmd/Ctrl+Shift+P` and run **MCP: Connect to server**. A browser window will open — complete the OAuth flow to authorize the connection. Return to Cursor. The server status should show **Connected**. **Verify it's working:** In Cursor's AI chat, type `List my DeepVista context cards.` You should see a summary of cards from your active project. Open or create your Claude Desktop config file and add the DeepVista server entry. ```json ~/Library/Application Support/Claude/claude_desktop_config.json theme={null} { "mcpServers": { "deepvista": { "command": "npx", "args": [ "-y", "mcp-remote", "https://api.deepvista.ai/mcp" ] } } } ``` On Windows the config file is at `%APPDATA%\Claude\claude_desktop_config.json`. Claude Desktop uses `npx` to launch the bridge — Node.js 18+ is required. Run `node --version` to confirm. Use `Cmd+Q` on macOS or right-click the taskbar icon and select **Quit**. A browser window will prompt you to sign in to DeepVista. You'll be redirected back to Claude automatically once authorized. **Verify it's working:** Start a new Claude conversation and ask `Show me my recent DeepVista context cards.` A list from your active project should appear. Run the following command to add the DeepVista MCP server: ```bash theme={null} claude mcp add --transport http deepvista-server https://api.deepvista.ai/mcp ``` Then open a Claude Code session and run `/mcp` to go through the authentication flow. **Verify it's working:** Ask Claude Code to `search my DeepVista cards for [any topic]`. A matching result confirms the connection is live. Press `Ctrl/Cmd+Shift+P`, search for **MCP: Add Server**, select **Command (stdio)**, and enter: ```text theme={null} npx mcp-remote https://api.deepvista.ai/mcp ``` Name the server **deepvista** and hit enter. Then activate it via **MCP: List Servers** → select **deepvista** → **Start Server**. Alternatively, add it directly to your settings: ```json theme={null} { "mcpServers": { "deepvista": { "command": "npx", "args": ["-y", "mcp-remote", "https://api.deepvista.ai/mcp"] } } } ``` Press `Ctrl/Cmd+,` to open Windsurf settings. Scroll to **Cascade → MCP servers**, then select **Add Server → Add custom server** and paste: ```json theme={null} { "mcpServers": { "deepvista": { "command": "npx", "args": ["-y", "mcp-remote", "https://api.deepvista.ai/mcp"] } } } ``` Hundreds of tools now support MCP. Use these settings for any client not listed above. **Native remote MCP (Streamable HTTP):** ```text theme={null} URL: https://api.deepvista.ai/mcp Auth: OAuth 2.1 (dynamic client registration) ``` **Via `mcp-remote` bridge (stdio clients):** ```text theme={null} command: npx args: -y mcp-remote https://api.deepvista.ai/mcp ``` After adding the server, your client will open a browser window for the OAuth sign-in flow. **Verify it's working:** Ask your AI to `search my DeepVista cards for [any topic you have a card on]`. A matching result confirms the connection is live. *** ## What you can do Once connected, talk to your AI naturally. Here are some example prompts to get started. | Action | Example prompt | | - | - | | **Find** | `Find my context cards about machine learning pipelines` | | **Search** | `Which cards mention series A fundraising?` | | **Create** | `Create a new context card for Acme Corp — Q3 partnership notes` | | **Update** | `Update my card on Sarah Chen with: joined the advisory board in May` | | **List** | `Show me all context cards I've updated this week` | | **Delete** | `Delete the context card titled Old vendor contract` | The AI will always confirm before deleting a card. To switch projects, change your active project in DeepVista — the MCP connection reflects it immediately. *** ## Troubleshooting Open [deepvista.ai](https://deepvista.ai) in your browser and confirm you're signed in to the correct account. Then return to your AI client and try connecting again. If the issue persists, clear the stored auth cache and retry: ```bash theme={null} rm -rf ~/.mcp-auth ``` Double-check that the endpoint URL in your config is exactly `https://api.deepvista.ai/mcp` — no trailing slash. If you're using the `mcp-remote` bridge, confirm Node.js 18+ is installed: ```bash theme={null} node --version ``` The MCP server returns cards from your **currently active project**. Open DeepVista and confirm the correct project is selected in the project switcher. An empty list is expected if the active project has no cards yet. Use this WSL-compatible configuration instead: ```json theme={null} { "mcpServers": { "deepvista": { "command": "wsl", "args": ["npx", "-y", "mcp-remote", "https://api.deepvista.ai/mcp"] } } } ``` Clear saved auth info and try again: ```bash theme={null} rm -rf ~/.mcp-auth ``` You may also need to update to a newer version of Node.js if your current version is below 18. *** Capture notes and run workflows from your terminal using the DeepVista CLI. Sign up to start connecting your AI tools to DeepVista. # Social Media Management Source: https://docs.deepvista.ai/social-media-management Automate your social distribution and inbound engagement without losing personal context or sending generic AI responses. Top 10 LinkedIn contacts to focus on, ranked by ICP fit, engagement status, and deal priority ## What you can do **Ask DeepVista:** * "List top 10 LinkedIn contacts I should focus on today." * "Draft personalized messages for them." * "Update lead status on the CRM tracker." **Our Core Playbook:** This is the exact workflow our team uses to handle inbound DMs, auto-reply on LinkedIn and X, and draft structured social posts from product updates. ## Who should read this This guide is designed for **founders, marketing operators, and developer advocates** who want to maintain an active social presence and respond instantly to inbound interest. You should follow this playbook if you: * **Receive inbound messages or comments on LinkedIn and X** and want contextually relevant replies drafted automatically. * **Want to capture leads from social interactions** directly into your VistaBase CRM tracker. * **Convert internal notes, product updates, or trending topics** into ready-to-publish X posts. ## 1. LinkedIn Auto-Reply Auto-reply to new LinkedIn messages triggered by a webhook using a Unipile account. * Please sign up an DeepVista account at [https://app.deepvista.ai](https://app.deepvista.ai) * Please sign up an Unipile account at: [https://dashboard.unipile.com/signup/](https://dashboard.unipile.com/signup/) ### Connect Unipile and DeepVista ```text wrap theme={null} Set up a workflow based on https://raw.githubusercontent.com/DeepVista-AI/ai-native-skills/refs/heads/main/skills/workflow-unipile-linkedin-message-response.md. Guide me through the set up (including setting up Linkedin and Webhook in unipile) ``` Image Generating a Unipile access token You'll find it in the top-left corner of the sidebar. Unipile dashboard with the DSN highlighted in the sidebar ```text theme={null} Here's the command and the DSN: ``` ### Authorize LinkedIn DeepVista will create a Linkedin authorization link. Image Image Then put your linkedin credential to login. Note that this is a [unipile.com](http://unipile.com) authorization page. ### Go Live `Set up the workflow webhook callback URL using manage_skill_webhook.` It will set up the webhook connection for you. You're ready to auto-reply to any new LinkedIn messages. You can test it by having your friend to message you. # Apollo Integration Source: https://docs.deepvista.ai/tutorials/apollo-integration Connect Apollo to DeepVista and get people-search results verified against Apollo's own database, right inside your CRM tracker. ## Overview DeepVista can query Apollo's people-search database directly. Apollo's direct people-search endpoint requires an **Apollo Master API Key**. ## Prerequisites * A DeepVista account with an active project. [Sign up here](https://app.deepvista.ai/login?redirectUrl=%2Fsign%2520in) if you don't have one. * An [Apollo](https://www.apollo.io) account with a Master API Key. In Apollo, go to **Settings → Integrations → API** to generate one. ## Step-by-step guide DeepVista returns a **Connect Apollo Integration** link through Composio. This link is valid for 10 minutes. DeepVista chat with a Connect Apollo Integration link and next steps for authorizing the connection Open it in your browser and enter your Apollo API key on the authorization screen. Try a prompt like: ```text theme={null} Find 20 Seed/Series A B2B SaaS founders in the US. ``` DeepVista returns a tracker sourced directly from Apollo, with every row's `Source` column set to `Apollo`. A US B2B SaaS Founders (Apollo Verified) tracker with a Source column set to Apollo on every row ## Next steps Build your CRM tracker, then point it at Apollo for verified contact data. Feed Apollo-verified leads straight into a campaign's lead capture flow. # Customer Research & Tracking Source: https://docs.deepvista.ai/tutorials/customer-research-and-tracking Speed up customer acquisition with an intelligent system that captures, researches, and follows up for you. **Our Core Playbook:** This is the exact workflow our internal team uses daily to research leads, automate CRM updates, and handle outbound outreach.