Skip to main content

MCP-Native Agentic Framework for General-Purpose Task Automation

Project description

Fluxibly

MCP-Native Agentic Framework for General-Purpose Task Automation

Python 3.11+ License: MIT

Fluxibly is a modular, extensible agentic framework with native support for the Model Context Protocol (MCP). It enables developers to create sophisticated AI agents that can interact with external tools and services through MCP servers.

Features

  • MCP-Native Architecture: First-class support for Model Context Protocol servers
  • Flexible Workflow Engine: Execute single tasks or batch operations with ease
  • Stateful Conversations: Maintain context across multiple interactions
  • Profile-Based Configuration: Easy setup with YAML-based configuration profiles
  • Async-First Design: Fully asynchronous API for high performance

Installation

Install Fluxibly using pip:

pip install fluxibly

Or using uv (recommended):

uv add fluxibly

Quick Start

Simple One-Shot Execution

import asyncio
from fluxibly import run_workflow

async def main():
    response = await run_workflow(
        "What is the capital of France?",
        profile="default"
    )
    print(response)

asyncio.run(main())

Using the Workflow Engine

import asyncio
from fluxibly import WorkflowEngine, WorkflowConfig

async def main():
    # Configure the workflow
    config = WorkflowConfig(
        name="my_workflow",
        agent_type="orchestrator",
        profile="default",
        stateful=False
    )

    # Create and initialize engine
    engine = WorkflowEngine(config=config)
    try:
        await engine.initialize()
        response = await engine.execute("Your task here")
        print(response)
    finally:
        await engine.shutdown()

asyncio.run(main())

Batch Processing

import asyncio
from fluxibly import run_batch_workflow

async def main():
    tasks = [
        "Explain async/await in Python",
        "What are Python decorators?",
        "How does the GIL work?"
    ]

    responses = await run_batch_workflow(
        tasks,
        profile="development_assistant"
    )

    for task, response in zip(tasks, responses):
        print(f"Q: {task}")
        print(f"A: {response}\n")

asyncio.run(main())

Configuration

Fluxibly uses YAML-based configuration profiles. You can use built-in profiles or create custom ones.

Using Custom Profile Files

You can also load profiles from custom file paths:

# Load by absolute path
engine = WorkflowEngine.from_profile("/path/to/my_profile.yaml")

# Load by relative path
engine = WorkflowEngine.from_profile("../custom_profiles/special.yaml")

# Also works with convenience functions
response = await run_workflow(
    "Your task",
    profile="/path/to/my_profile.yaml"
)

Profile Format

Here's an example profile structure:

name: default
description: Default configuration profile

llm:
  provider: anthropic
  model: claude-sonnet-4-5-20250929
  temperature: 0.7
  max_tokens: 4096

mcp:
  enabled: true
  servers_config: config/mcp_servers.yaml

MCP Server Integration

Fluxibly provides seamless integration with MCP servers. Configure your MCP servers in config/mcp_servers.yaml:

servers:
  filesystem:
    command: npx
    args:
      - -y
      - "@modelcontextprotocol/server-filesystem"
      - "/path/to/allowed/directory"
    env:
      NODE_OPTIONS: "--max-old-space-size=4096"

Then use the MCP client manager in your code:

from fluxibly import MCPClientManager

async def main():
    manager = MCPClientManager()
    await manager.initialize()

    # MCP tools are now available to your agents
    # ...

    await manager.cleanup()

Advanced Features

Stateful Conversations

config = WorkflowConfig(
    name="stateful_workflow",
    agent_type="agent",
    profile="default",
    stateful=True  # Enable state persistence
)

engine = WorkflowEngine(config=config)
await engine.initialize()

# First interaction
response1 = await engine.execute("My name is Alice")

# Context is preserved
response2 = await engine.execute("What's my name?")
# Response will remember "Alice"

Development

Setting Up Development Environment

# Clone the repository
git clone https://github.com/Lavaflux/fluxibly.git
cd fluxibly

# Install dependencies
uv sync

# Run tests
uv run --frozen pytest

# Format code
uv run --frozen ruff format .

# Type checking
uv run --frozen pyright

Requirements

  • Python 3.11 or higher
  • API keys for LLM providers (e.g., Anthropic, OpenAI)
  • Optional: Node.js for MCP server support

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Links

Acknowledgments

Built with:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fluxibly-0.1.0.tar.gz (532.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fluxibly-0.1.0-py3-none-any.whl (74.2 kB view details)

Uploaded Python 3

File details

Details for the file fluxibly-0.1.0.tar.gz.

File metadata

  • Download URL: fluxibly-0.1.0.tar.gz
  • Upload date:
  • Size: 532.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for fluxibly-0.1.0.tar.gz
Algorithm Hash digest
SHA256 54117580139da312a6b1fd2e2a71eb5f8866a60783e28baf820a0a64b2c5b326
MD5 b1f4e0120dd4455673420f7c6287b499
BLAKE2b-256 0a7c70fad2f3e8aab46e4428528db9d741c19a0c45dcc3cdc1bb75d95788ddb1

See more details on using hashes here.

File details

Details for the file fluxibly-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: fluxibly-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 74.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for fluxibly-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 be4534ec2214ec55fd83afacdaa099f3403d611a48f8b39164d75c6196aca75c
MD5 00d7ab78210a4880720674b20670a071
BLAKE2b-256 2d26c06f4a8ee4e08b6dd63331c283f10d241034d06b644ac59589ecde9e0421

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page