Connic

Predefined, custom,
or any MCP server

Pick from a growing catalog of typed, tested tools. Write your own as Python functions. Or expose any MCP server, and every agent in the project can use it.

Read the tools docs

Tools

6 attached
  • Custominvoices.parse_pdf
  • Custominvoices.store
  • Predefinedweb_search
  • MCPlinear.create_issue
  • MCPcontext7.search_docs
  • Custombilling.calculate_vat
Predefined

The tools you'd otherwise reimplement

A built-in catalog for the things every agent needs: knowledge search, the project database, agent-to-agent orchestration, and web access.

Knowledge
query_knowledge

Search the knowledge base for relevant information.

Knowledge
store_knowledge

Queue new information for knowledge base indexing.

Knowledge
delete_knowledge

Remove entries from the knowledge base.

Knowledge
kb_list_namespaces

List knowledge base namespaces and their hierarchy.

Database
db_find

Query documents from a collection using filters.

Database
db_insert

Insert one or more documents into a collection.

Database
db_update

Update documents matching a filter.

Database
db_delete

Delete documents matching a filter.

Database
db_count

Count documents in a collection, optionally filtered.

Database
db_list_collections

List collections with counts and storage sizes.

Orchestration
trigger_agent

Trigger another agent within the same project.

Orchestration
trigger_agent_at

Schedule an agent to run at a future time.

Web
web_search

Search the web for real-time information.

Web
web_read_page

Fetch a web page and return its content as markdown.

See docs for the full reference.

Custom

A Python function is a tool

Plain functions in tools/. Type hints and a docstring are everything Connic needs to expose them to your agent.

tools/billing.py
from datetime import date

def calculate_late_fee(
    invoice_total: float,
    due_date: date,
    paid_date: date,
) -> dict:
    """Compute the late fee for an overdue invoice.

    Args:
        invoice_total: The original invoice total in dollars
        due_date: The original due date
        paid_date: The date the invoice was paid

    Returns:
        Dict with the fee amount in cents and the days overdue.
    """
    days_overdue = max(0, (paid_date - due_date).days)
    fee_cents = int(invoice_total * 100 * 0.015 * days_overdue)
    return {"fee_cents": fee_cents, "days_overdue": days_overdue}
Type hints become the schema

The agent sees a typed JSON schema generated from the function signature. No decorators, no manual schema authoring.

Docstring becomes the description

The LLM uses your docstring to decide when to call the tool. Document each parameter under Args so the model picks the right one.

Auto-discovered from tools/

Drop the file into your tools/ directory and reference it as module.function in the agent YAML. Wildcards like calculator.* work too.

MCP

Any MCP server, every agent

Add servers to mcp_servers in the agent YAML. Connic connects, discovers tools, and exposes them to the LLM at runtime.

support-triage
calls tools as if local
MCP client
context7HTTP
research-hubHTTP
agents/support.yaml
mcp_servers:
  - name: context7
    url: https://mcp.context7.com/mcp

  - name: research-hub
    url: https://mcp.example.com/research
    headers:
      Authorization: "Bearer ${RESEARCH_TOKEN}"
    tools:
      - search_papers
      - fetch_abstract

  - name: internal-tools
    url: https://mcp.internal.company.com/tools
    headers:
      Authorization: "Bearer ${INTERNAL_TOKEN}"
    discoverable: true   # indexed for on-demand search, not loaded upfront
What every tool gets, free

Production primitives, per call

Predefined, custom, and MCP tools all share the same discovery, observability, and lifecycle semantics.

Auto-discovery

Drop a Python file in tools/ and reference module.function in your agent YAML. Subfolders and wildcards (calculator.*) both work.

Graceful stop & abort

Raise StopProcessing from a tool to end the run successfully with a final message, or AbortTool from a hook to skip a single call.

Built-in observability

Every tool call shows up in run details with inputs, output, and duration. Prints, stderr, and tools.* loggers stream to the Logs tab.

Discoverable tools

Mark rarely-used tools (or whole MCP servers) as discoverable. They stay out of the LLM context until the agent searches for them by description.

Frequently Asked Questions

Custom tools are Python today. If your logic lives elsewhere, wrap it in an MCP server and add it under mcp_servers. The agent sees those tools natively alongside your Python ones.

Plain Python functions in your tools/ directory are auto-discovered, no decorators needed. Reference them in agent YAML as module.function (e.g. calculator.add). Wildcards (calculator.*, search.web_*) include multiple at once.

Yes. connic dev watches the tools/ directory and re-registers tools the moment you save. See the dev-server docs for details.

HTTP and SSE. STDIO isn't supported; MCP servers must be network-accessible from the agent container. Authenticate by passing headers (e.g. Authorization: Bearer ${TOKEN}) using ${VAR} syntax for secrets.

Predefined tools cover commodity work: knowledge search (query_knowledge), the project database (db_find, db_insert, …), agent orchestration (trigger_agent), and the web (web_search, web_read_page). Reach for custom Python when the logic is yours alone, like domain calculations, internal API calls, or workflow orchestration. The recommended pattern for the database tools is to wrap them in custom tools that speak your domain language.

Yes. Add the trigger_agent predefined tool. The caller invokes another agent in the same project by name, optionally waiting for the response. Use trigger_agent_at to schedule a future run by delay or absolute timestamp (up to 30 days out).