1. Conduid
  2. AI
  3. Foxy Contexts
MCP server · AI

Foxy Contexts

Foxy contexts is a library for building context servers supporting Model Context Protocol

Unclaimed last commit 11 months ago ai
52Fair

Scored 6 months ago · breakdown

About Foxy Contexts

Foxy Contexts is an MCP server published by strowk in the AI category: foxy contexts is a library for building context servers supporting Model Context Protocol.

The repository has 114 stars and 7 forks, with the last commit 11 months ago. Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.

Install

From source
git clone https://github.com/strowk/foxy-contexts

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Ask AI

✦

Ask AI about Foxy Contexts

Powered by Claude · Grounded in docs

I know everything about Foxy Contexts. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

  • ✓README presentThe repository ships documentation.

5 checks have not been run yet.

README

Foxy contexts is a Golang library for building context servers supporting Model Context Protocol.

This library only supports server side of the protocol. Using it you can build context servers using declarative approach, by defining tools, resources and prompts and then registering them with your app.Builder, which is using uber's fx App under the hood and you can inject into its container as well.

With this approach you can easily colocate call/read/get logic and definitions of your tools/resources/prompts in a way that every tool/resource/prompt is placed in a separate place, while Dependency Injection allows you to reuse shared parts like clients, database connections, etc.

Features

Here is list of features that are implemented and planned:

  • Base (lifecycle/ping)
    • Progress (planned)
  • Transports
    • Stdio Transport
    • SSE Transport
    • Streamable HTTP Transport (beta)
  • Tools
    • Package toolinput helps define tools input schema and validate arriving input
  • Resources
    • Resources - static
    • Resources - dynamic via Resource Providers
    • Resources - dynamic via Resource Templates (planned)
    • Resource Templates completion (planned)
    • Resource subscriptions
  • Prompts
  • Prompts Completion
  • Functional Testing package foxytest
  • Simple building of your MCP server with the power of Dependency Injection
  • Logging via MCP (planned)
  • Sampling (planned)
  • Roots (planned)
  • Pagination (planned)
  • Notifications list_changed (planned)
  • Testing - functional tests with foxytest package

Check docs and examples to know more.

Tool Example

For example try following

git clone https://github.com/strowk/foxy-contexts
cd foxy-contexts/examples/list_current_dir_files_tool
npx @modelcontextprotocol/inspector go run main.go

, then once inspector is started in browser open http://localhost:6274 and try to use list-current-dir-files.

Here's the code of that example from examples/list_current_dir_files_tool/main.go (in real world application you would probably want to split it into multiple files):

package main

import (
	"fmt"
	"os"

	"github.com/strowk/foxy-contexts/pkg/app"
	"github.com/strowk/foxy-contexts/pkg/fxctx"
	"github.com/strowk/foxy-contexts/pkg/mcp"
	"github.com/strowk/foxy-contexts/pkg/stdio"
	"go.uber.org/fx"
	"go.uber.org/fx/fxevent"
	"go.uber.org/zap"
)

// This example defines list-current-dir-files tool for MCP server, that prints files in the current directory
// , run it with:
// npx @modelcontextprotocol/inspector go run main.go
// , then in browser open http://localhost:6274
// , then click Connect
// , then click List Tools
// , then click list-current-dir-files

// NewListCurrentDirFilesTool defines a tool that lists files in the current directory
func NewListCurrentDirFilesTool() fxctx.Tool {
	return fxctx.NewTool(
		// This information about the tool would be used when it is listed:
		&mcp.Tool{
			Name:        "list-current-dir-files",
			Description: Ptr("Lists files in the current directory"),
			InputSchema: mcp.ToolInputSchema{
				Type:       "object",
				Properties: map[string]map[string]interface{}{},
				Required:   []string{},
			},
		},

		// This is the callback that would be executed when the tool is called:
		func(_ context.Context, args map[string]interface{}) *mcp.CallToolResult {
			files, err := os.ReadDir(".")
			if err != nil {
				return &mcp.CallToolResult{
					IsError: Ptr(true),
					Meta:    map[string]interface{}{},
					Content: []interface{}{
						mcp.TextContent{
							Type: "text",
							Text: fmt.Sprintf("failed to read dir: %v", err),
						},
					},
				}
			}
			var contents []interface{} = make([]interface{}, len(files))
			for i, f := range files {
				contents[i] = mcp.TextContent{
					Type: "text",
					Text: f.Name(),
				}
			}

			return &mcp.CallToolResult{
				Meta:    map[string]interface{}{},
				Content: contents,
				IsError: Ptr(false),
			}
		},
	)
}

func main() {
	app.
		NewBuilder().
		// adding the tool to the app
		WithTool(NewListCurrentDirFilesTool).
		// setting up server
		WithName("list-current-dir-files").
		WithVersion("0.0.1").
		WithTransport(stdio.NewTransport()).
		// Configuring fx logging to only show errors
		WithFxOptions(fx.Provide(func() *zap.Logger {
				cfg := zap.NewDevelopmentConfig()
				cfg.Level.SetLevel(zap.ErrorLevel)
				logger, _ := cfg.Build()
				return logger
			}),
			fx.Option(fx.WithLogger(
				func(logger *zap.Logger) fxevent.Logger {
					return &fxevent.ZapLogger{Logger: logger}
				},
			)),
		).
		Run()
}

func Ptr[T any](v T) *T {
	return &v
}

README copy captured when this server was indexed; it may lag the repository. The original is authoritative.

Questions

About Foxy Contexts

How do I install Foxy Contexts?

No package has been published for this server, so install it from source: clone the repository and follow its README.

Is Foxy Contexts safe to use with an AI agent?

Its trust score is 52 out of 100 (fair). It passes 1 of the 1 static security checks run so far. It has no ConduID identity yet, so agent calls to it are not receipted.

Is Foxy Contexts still maintained?

The last commit was 11 months ago. That's long enough that you should check whether the maintainer is responding to issues before depending on it.