Skip to content

Latest commit

 

History

History
841 lines (588 loc) · 39.4 KB

File metadata and controls

841 lines (588 loc) · 39.4 KB

MCPs

Catalog

Name Description Type oPack Location
mcp-db Database access MCP STDIO/HTTP (included) mcp-db.yaml
mcp-email Email sending MCP STDIO/HTTP (included) mcp-email.yaml
mcp-es-search ElasticSearch/OpenSearch full-text search MCP STDIO/HTTP ElasticSearch mcp-es-search.yaml
mcp-file Local file management MCP STDIO/HTTP (included) mcp-file.yaml
mcp-notify Notification MCP (Pushover) STDIO/HTTP opack install notifications Provided by the notifications oPack (see its documentation)
mcp-net Network utility MCP STDIO/HTTP (included) mcp-net.yaml
mcp-fin Yahoo Finance market data MCP STDIO/HTTP (included) mcp-fin.yaml
mcp-kube Kubernetes management MCP STDIO/HTTP (included) mcp-kube.yaml
mcp-time Time and timezone utility MCP STDIO/HTTP (included) mcp-time.yaml
mcp-random Random data generation MCP STDIO/HTTP (included) mcp-random.yaml
mcp-ch Data channel MCP (STDIO/HTTP) STDIO/HTTP (included) mcp-ch.yaml
mcp-ssh SSH execution MCP (secure exec) STDIO/HTTP (included) mcp-ssh.yaml
mcp-shell Local shell execution MCP STDIO/HTTP (included) mcp-shell.yaml
mcp-mini-a Mini-A agent runner MCP STDIO/HTTP (included) mcp-mini-a.yaml
mcp-a2a A2A agent bridge MCP (consume external A2A agents as tools) STDIO/HTTP (included) mcp-a2a.yaml
mcp-proxy MCP proxy aggregating multiple downstream MCP connections STDIO/HTTP (included) mcp-proxy.yaml
mcp-oaf OpenAF / oJob / oAFp documentation MCP STDIO/HTTP (included) mcp-oaf.yaml
mcp-oaf-browse Generic browse MCP backed by the oJob-common HTTP Browse API STDIO/HTTP (included) mcp-oaf-browse.yaml
mcp-oafp OpenAF processor (oafp) runner & docs MCP STDIO/HTTP (included) mcp-oafp.yaml
mcp-office Office file utilities (XLSX/DOCX via plugin-XLS) STDIO/HTTP plugin-XLS mcp-office.yaml
mcp-pass MCP passthrough/merge server STDIO/HTTP (included) mcp-pass.yaml
mcp-rss RSS discovery and retrieval MCP STDIO/HTTP (included) mcp-rss.yaml
mcp-s3 S3 object storage MCP STDIO/HTTP (included) mcp-s3.yaml
mcp-telco Telecommunications utilities MCP (country codes, phone number info) STDIO/HTTP (included) mcp-telco.yaml
mcp-weather Weather information MCP (wttr.in) STDIO/HTTP (included) mcp-weather.yaml
mcp-ollama-web-search Ollama web search API MCP STDIO/HTTP (included) mcp-ollama-web-search.yaml
mcp-web Web search and URL fetching MCP STDIO/HTTP (included) mcp-web.yaml
mcp-math Mathematical operations and unit conversions STDIO/HTTP (included) mcp-math.yaml

See CREATING.md for instructions on creating new MCPs and contribution guidelines.

Examples

mcp-mini-a

mcp-mini-a exposes the Mini-A agent as an MCP server. Use the run-goal tool to execute goals and retrieve the final answer plus runtime metrics. Launch-time arguments control sensitive capabilities (for example useshell, mcp, or model overrides); remote callers can only adjust the goal alongside formatting and planning flags. Provide shared knowledge or default rules at startup via knowledge= or rules= arguments when launching ojob.

The server identity and tool description are templatable at launch time using Handlebars {{varname}} substitution (powered by tplDesc):

Parameter What it controls Default
servername serverInfo.name advertised to MCP clients mini-a-agent
servertitle Human-readable server title OpenAF mini-a MCP agent runner server
tooldesc Description of the run-goal tool shown to the model (built-in description)
toolprefix Prefix prepended to every exposed tool name (none)
# Default launch — single run-goal tool, no customization
oafp in=mcp data="(cmd: 'ojob mcps/mcp-mini-a.yaml', tool: run-goal, params: (goal: 'summarize README.md', format: 'md', useplanning: true))"

# Persona: coding assistant with a renamed tool and scoped knowledge
ojob mcps/mcp-mini-a.yaml \
  servername="coder-agent" \
  servertitle="Mini-A Coding Assistant" \
  tooldesc="Ask the coding agent to write, review, or fix code" \
  knowledge="You are an expert software engineer. Prefer concise idiomatic code." \
  mode=code \
  onport=9000

# Add a prefix so the tool appears as devops-run-goal to the client
ojob mcps/mcp-mini-a.yaml toolprefix="devops-" rules="[no-shell]" onport=9001

# STDIO persona — used as mcp= inside another Mini-A instance
mini-a goal="..." \
  mcp="(cmd: 'ojob mcps/mcp-mini-a.yaml servername=reviewer tooldesc=Review this code for quality issues')" \
  usetools=true

mcp-a2a

mcp-a2a bridges any external Google A2A-protocol agent into Mini-A as MCP tools. At startup it fetches each agent's /.well-known/agent.json Agent Card, registers its skills, and exposes two tools:

  • a2a-agents — lists all registered agents and their declared skills; pass refresh=true to re-fetch cards live.
  • a2a-task — sends a task to a named agent via JSON-RPC 2.0 (tasks/send) and polls (tasks/get) until the task reaches a terminal state, then returns the text artifacts.

Key launch parameters:

Parameter Description Default
agents Comma-separated base URLs of A2A agents to connect to (required)
apitoken Bearer token sent with every A2A HTTP request (none)
pollinterval Polling interval in ms while awaiting task completion 1000
timeout Default task timeout in seconds 120
# Start as an HTTP MCP server bridging two A2A agents
ojob mcps/mcp-a2a.yaml \
  agents="http://agent1:9000,http://agent2:9000" \
  onport=8888

# Use as mcp= inside Mini-A to give it access to external A2A agents
mini-a goal="use the data-analyst agent to summarize last quarter sales" \
  mcp="(cmd: 'ojob mcps/mcp-a2a.yaml agents=http://analyst:9000')" \
  usetools=true

# With authentication and a shorter poll interval
ojob mcps/mcp-a2a.yaml \
  agents="https://secure-agent.example.com" \
  apitoken="my-bearer-token" \
  pollinterval=500 \
  timeout=60 \
  onport=8888

mcp-proxy

mcp-proxy aggregates multiple downstream MCP connections (STDIO or HTTP remote) into a single unified MCP server. This enables you to expose a consolidated set of tools from various MCP sources through one endpoint, simplifying integration with LLMs and other MCP clients.

Key arguments:

  • mcp (required): JSSLON string describing one MCP connection or an array of MCP connection descriptors. Each descriptor follows the same format used with Mini-A's mcp= parameter.
  • onport (optional): Start an HTTP MCP server on the specified port.
  • libs (optional): Comma-separated libraries or @oPack/library.js references to preload before connecting (useful for custom helpers or drivers).

The proxy exposes a single powerful tool:

  • proxy-dispatch: Interact with downstream MCP connections. Supports three actions:
    • list: List all registered connections and their tools (optionally filter by connection).
    • search: Search for tools across connections using a text query that matches against tool names, descriptions, and annotations.
    • call: Invoke a specific tool on a target connection (automatically resolves which connection hosts the tool if unambiguous).

Available parameters for proxy-dispatch:

  • action (required): One of list, search, or call.
  • connection (optional): Connection identifier or alias to scope the action.
  • query (optional): Search text for search action.
  • tool (optional): Tool name for call action.
  • arguments (optional): Input arguments to forward to the downstream tool when calling.
  • meta (optional): Metadata object forwarded to the downstream MCP call.
  • limit (optional): Maximum number of results for search actions.
  • includeTools, includeInputSchema, includeAnnotations (optional): Control verbosity of returned metadata.
  • refresh (optional): Refresh tool metadata from downstream MCPs before executing the action.

Example — aggregate multiple STDIO MCPs and call remotely:

# Start the proxy as an HTTP server aggregating mcp-time and mcp-net
ojob mcps/mcp-proxy.yaml onport=9090 \
  mcp="[(cmd: 'ojob mcps/mcp-time.yaml'), (cmd: 'ojob mcps/mcp-net.yaml')]"

# List all available connections and their tools
oafp in=mcp data="(type: remote, url: 'http://localhost:9090/mcp', tool: proxy-dispatch, params: (action: list))"

# Search for tools related to 'time'
oafp in=mcp data="(type: remote, url: 'http://localhost:9090/mcp', tool: proxy-dispatch, params: (action: search, query: 'time'))"

# Call a specific tool through the proxy
oafp in=mcp data="(type: remote, url: 'http://localhost:9090/mcp', tool: proxy-dispatch, params: (action: call, tool: 'current-time'))"

Example — mix STDIO and remote MCPs:

# Aggregate a local MCP and a remote one
ojob mcps/mcp-proxy.yaml onport=8080 \
  mcp="[(cmd: 'ojob mcps/mcp-time.yaml'), (type: remote, url: 'http://external.mcp.local:1234/mcp')]"

Example — use with Mini-A to access aggregated tools:

# The proxy can simplify mcp= configuration by consolidating multiple sources
mini-a goal="what time is it in Tokyo and what is my public IP?" \
  mcp="(type: remote, url: 'http://localhost:9090/mcp')" rpm=20

mcp-db

mcp-db provides JDBC-backed database access over STDIO or HTTP. Configure it with the following arguments:

  • jdbc (required): JDBC connection string.
  • user / pass (optional): credentials to authenticate with the database.
  • rw (optional): set to true to allow write operations; defaults to read-only.
  • libs (optional): comma-separated libraries or @oPack/library.js references to preload before creating the connection (useful for helper functions or vendor drivers already available on disk).
  • onport (optional): start an HTTP MCP server on the specified port.
ojob mini-a.yaml goal="create a 'test' table with all union european countries and cities" \
  mcp="(cmd: 'ojob mcps/mcp-db.yaml jdbc=jdbc:h2:./data user=sa pass=sa libs=db/helpers.js', timeout: 5000)" \
  knowledge="- generate H2 compatible SQL"
ojob mini-a.yaml goal="build a markdown table with the contents of the 'test' table" \
  mcp="(cmd: 'ojob mcps/mcp-db.yaml jdbc=jdbc:h2:./data user=sa pass=sa libs=db/helpers.js', timeout: 5000)" \
  knowledge="- generate H2 compatible SQL" debug=true

mcp-email

ojob mini-a.yaml goal="send an email reminding the team about today's standup" mcp="(cmd: 'ojob mcps/mcp-email.yaml smtpserver=smtp.example.com from=bot@example.com user=bot@example.com pass=<app_password> tls=true html=false', timeout: 5000)"

mcp-file

mcp-file exposes file system operations (read, list, search, write, delete) restricted to a configurable root directory. By default all write/delete tools are disabled until you opt in with readwrite=true.

  • root (optional): absolute or relative base directory for all requests (defaults to the working directory). The MCP will reject paths that resolve outside of this root.
  • readwrite (optional, default: false): enable write/delete capabilities. Without it, only read-only tools are available.
ojob mini-a.yaml goal="summarize the README in ./docs" \
  mcp="(cmd: 'ojob mcps/mcp-file.yaml root=docs', timeout: 5000)"
ojob mini-a.yaml goal="create a TODO.md placeholder inside ./notes" \
  mcp="(cmd: 'ojob mcps/mcp-file.yaml root=notes readwrite=true', timeout: 5000)" \
  knowledge="- ensure confirm=true is set when deleting files"

mcp-notify

ojob mini-a.yaml goal="send a notification saying 'Hello World from OpenAF MCP!'" \
    mcp="(cmd: 'ojob notifications/mcp-notify.yaml pushoverkey=<your_pushover_key> userid=<your_user_id>', timeout: 5000)"

mcp-net

ojob mini-a.yaml goal="get the public IP address of this machine" mcp="(cmd: 'ojob mcps/mcp-net.yaml', timeout: 5000)"

mcp-time

ojob mini-a.yaml goal="tell me the current time in Tokyo and convert it to New York time" mcp="(cmd: 'ojob mcps/mcp-time.yaml', timeout: 5000)" knowledge="- prefer ISO 8601 timestamps"

Key tools exposed by mcp-time include:

  • current-time: Provides detailed information about the current moment for an optional timezone.
  • timezone-tools: Executes timezone utilities by passing operation as convert, difference, or list alongside the relevant parameters.
  • sleep: Pauses execution for a specified number of milliseconds using OpenAF's sleep function.

mcp-random

mcp-random offers a collection of reproducible-friendly random data helpers covering integers, sequences, fractions, selections and Gaussian sampling. All tools accept an optional numeric seed to generate deterministic output when desired.

Key tools include:

  • random-integer: Returns a random integer within an inclusive range.
  • random-sequence: Produces a shuffled range of integers, optionally truncated to a requested length.
  • random-integer-set: Generates a sorted set of unique integers drawn from a range.
  • gaussian-sample: Creates normally distributed samples using java.util.Random#nextGaussian with configurable mean and standard deviation.
  • random-fraction: Emits fractions between 0 and 1 rounded to configurable decimal places.
  • random-choice: Picks one or more elements from a provided array, with optional uniqueness guarantees.
  • random-boolean: Generates booleans with an optional bias probability for true.
  • random-hex: Builds hexadecimal strings of a specific length.

mcp-ch

This MCP exposes OpenAF data channels over STDIO or as an HTTP remote server. It accepts the following arguments:

  • onport (optional): start an HTTP MCP server on the specified port.
  • chs (optional): a JSON/SLON array or map describing channels. Each channel object may include _name, _type, _rw (boolean read/write) and type-specific options (for example file: my-data.json). Example: ( _name: my-data, _type: file, _rw: true, file: my-data.json ) or as an array.
  • libs (optional): comma-separated libraries or @oPack/library.js references to preload before channel initialization; use it to bring additional helpers into scope.

Available tools (functions) exposed by mcp-ch:

  • ch-size : Returns the size of a data channel (input: dataCh).
  • ch-keys : Returns keys of a data channel (input: dataCh, optional extra).
  • ch-values : Returns all values of a data channel (input: dataCh, optional extra).
  • ch-get : Get a value from a data channel (input: dataCh, key, optional value).
  • ch-set : Set a value in a data channel (input: dataCh, key, value). Requires channel to be writable.
  • ch-unset : Unset a value in a data channel (input: dataCh, key). Requires channel to be writable.
  • ch-set-all : Set multiple values using keyFieldsList and valuesList (requires writable channel).
  • ch-unset-all: Unset multiple values using keyFieldsList and valuesList (requires writable channel).
  • ch-list : List all configured data channels.

Example: start as HTTP remote server on port 12345 with two channels (one simple read-only and one file-backed writable):

ojob mcps/mcp-ch.yaml onport=12345 libs="@mini-a/utils.js" \
  chs="[( _name: readonly, _type: simple, _rw: false ), ( _name: my-data, _type: file, _rw: true, file: my-data.json )]"

Call ch-get via STDIO MCP (example using oafp to call a tool):

oafp in=mcp data="(cmd: 'ojob mcps/mcp-ch.yaml', tool: ch-get, params: (dataCh: 'my-data', key: (id: 1)))"

Call ch-keys remotely against an HTTP MCP server:

oafp in=mcp data="(type: remote, url: 'http://localhost:12345/mcp', tool: ch-keys, params: (dataCh: 'my-data'))"

mcp-ssh

This MCP provides a secure SSH-based executor. It exposes two main tools:

  • shell-exec: execute a single shell command over SSH and receive stdout, stderr and exit code.
  • shell-batch: execute a batch of commands over SSH and receive an array of results for each command.

Important notes:

  • The ssh argument is mandatory and must be an OpenAF SSH URL (for example: ssh://user:pass@host:22/identKey?timeout=12345).
  • By default the MCP is read-only; set readwrite=true to allow commands that are normally blocked by the security policy.
  • Fine-tune command filtering with shellallow (allow specific commands), shellbanextra (add more banned commands), and shellallowpipes (permit pipes/redirection).

Example — run a single command via STDIO MCP:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-ssh.yaml ssh=ssh://user:pass@host:22/ident readwrite=false', tool: shell-exec, params: (command: 'uptime'))"

Example — start mcp-ssh as a remote HTTP MCP server on port 8888:

ojob mcps/mcp-ssh.yaml onport=8888 ssh=ssh://user:pass@host:22/ident readwrite=false

Example — call shell-batch remotely:

oafp in=mcp data="(type: remote, url: 'http://localhost:8888/mcp', tool: shell-batch, params: (commands: ['echo hello','date']))"

mcp-es-search

mcp-es-search exposes a focused read-only interface over an ElasticSearch or OpenSearch index. It is designed for documentation or knowledge-base retrieval, with optional toolPrefix support so multiple indexes can coexist in the same agent session without name collisions.

Key arguments:

  • url and index (required): endpoint and default index to query.
  • toolPrefix (optional): prepends tool names, for example docs- creates docs-search, docs-get, docs-read, docs-info.
  • label (optional): human-readable description injected into tool metadata.
  • user / password (optional): HTTP Basic authentication.
  • pathField, contentField, titleField (optional): map the document schema when your index does not use the defaults.

Tools:

  • search: full-text search with optional metadata filters and native highlights.
  • get: fetch a document by _id or by exact pathField value.
  • read: read a controlled slice of document content (head, tail, explicit line ranges, or regex matches).
  • info: inspect index statistics and field mappings.

Example — search an indexed documentation corpus:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-es-search.yaml url=http://localhost:9200 index=docs toolPrefix=docs- label=\"Project docs\"', tool: docs-search, params: (query: 'authentication token', size: 5))"

Example — read just the first lines of a matched document:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-es-search.yaml url=http://localhost:9200 index=docs', tool: read, params: (id: 'README.md', mode: 'head', lines: 40))"

mcp-oaf

This MCP serves OpenAF, oJob and oAFp documentation and cli utilities over STDIO or as an HTTP remote server. It exposes tools such as:

  • openaf-doc : search and return OpenAF help entries or the full help (cli mode returns oaf -h output)
  • ojob-doc : return oJob help or reference documentation
  • openaf-version : return OpenAF version and distribution
  • oafp-doc : return aOFp help/readme topics

Example — run locally and list OpenAF help (stdio mode):

ojob mcps/mcp-oaf.yaml

Example — request OpenAF help remotely (HTTP mode on port 8888):

oafp in=mcp data="(type: remote, url: 'http://localhost:8888/mcp', tool: openaf-doc, params: (search: 'help'))"

mcp-oaf-browse

mcp-oaf-browse turns an existing oJob-common HTTP Browse API into MCP tools. This is useful when you already have a browse-style HTTP endpoint and want Mini-A to explore it through stable list/get/search operations instead of custom prompt logic.

Key arguments:

  • browseAPIURL and browseUri (required): base Browse API endpoint and the target browse root.
  • label (optional): descriptive label shown in tool descriptions.
  • toolPrefix (optional): prefixes tool names to avoid collisions.
  • headers (optional): HTTP headers sent on every Browse API request.
  • defaultParams (optional): query parameters merged into every Browse API request.

Tools:

  • list: enumerate entries beneath the configured browse root.
  • get: retrieve a single object by relative path.
  • search: recursively search browse results using a regex with configurable depth and result limits.

Example — expose a local Browse API subtree as MCP tools:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-oaf-browse.yaml browseAPIURL=http://127.0.0.1:8091/api/browse browseUri=/files label=\"Workspace files\" toolPrefix=files-', tool: files-list, params: (path: 'docs'))"

mcp-kube

mcp-kube exposes selected Kubernetes management operations powered by the Kube oPack. It works either as a STDIO MCP or as an HTTP remote MCP. Configure connection credentials to your cluster through the startup arguments (url, user, pass, token, namespace, etc.). Set readwrite=true to enable operations that modify cluster resources. Use kubelib when you need to point at a specific kube.js location.

Available tools include:

  • list-namespaces : List all namespaces in the cluster.
  • get-resource : Retrieve Kubernetes objects or metrics via a single tool. Supported resource values include pods, deployments, statefulsets, clusterroles, clusterrolebindings, roles, rolebindings, ingresses, networkpolicies, resourcequotas, storageclasses, services, service-accounts, secrets, replicasets, persistent-volume-claims, persistent-volumes, nodes, configmaps, jobs, daemonsets, cronjobs, endpoints, pod, events, pods-metrics, nodes-metrics, and node-metrics (with optional namespace, full, and name/node parameters as applicable).
  • get-log : Retrieve logs from a pod (optionally container/stream specific).
  • apply-manifest : Apply a manifest (requires readwrite=true).
  • delete-manifest : Delete resources described by a manifest (requires readwrite=true).
  • scale-resource : Scale a workload resource (requires readwrite=true).

Example — list pods in the default namespace using STDIO MCP:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-kube.yaml url=https://k8s.example.com:6443 token=<bearer_token> namespace=default', \
  tool: get-resource, params: (resource: pods, namespace: default, full: false))"

Example — run as an HTTP MCP server on port 9000 and fetch node metrics remotely:

ojob mcps/mcp-kube.yaml onport=9000 url=~/.kube/config readwrite=false

oafp in=mcp data="(type: remote, url: 'http://localhost:9000/mcp', tool: get-resource, params: (resource: nodes-metrics))"

Small excerpt from mcp-oaf.yaml showing purpose and tools (truncated):

# Author: Nuno Aguiar
help:
	text: A STDIO/HTTP MCP OpenAF tools documentation server
	expects:
		- name: onport
			desc: If defined starts a MCP server on the provided port

jobs:
- name: OpenAF documentation
	exec: | #js
		if (args.cli) {
			return "```" + $sh(getOpenAFPath() + "oaf -h").get(0).stderr + "```"
		} else {
			if (isUnDef(args.search)) {
				return global.oaf_docs
			} else {
				return searchHelp(args.search)
			}
		}

mcp-oafp

mcp-oafp wraps the OpenAF processor (oafp) so that you can both execute transformations and inspect the embedded documentation. Key tools include:

  • run-oafp: invoke the oafp function directly with arbitrary parameters and optional inline data.
  • list-commands: parse the usage table into structured option metadata (supports filtering).
  • get-doc: retrieve the usage, filters, template helper or examples markdown.
  • search-doc: perform keyword searches across all documentation sections.
  • discover-capabilities: expose the dynamic inputs/transforms/outputs list (respecting optional libs).

Example — call oafp to convert CSV into JSON:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-oafp.yaml', tool: run-oafp, params: (params: (in: csv, out: json), data: 'name\\nage\\nJohn,42'))"

Example — search for filters documentation mentioning SQL:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-oafp.yaml', tool: search-doc, params: (query: 'sql'))"

mcp-office

mcp-office wraps plugin-XLS helpers so Mini-A can read or write XLSX and DOCX files within a restricted root directory. It defaults to read-only mode; start it with readwrite=true to enable the write tools.

Arguments:

  • root (optional, default current directory): base directory that all office file operations must stay inside.
  • readwrite (optional, default false): enables write operations.
  • onport (optional): expose the MCP over HTTP instead of STDIO.

Tools:

  • xlsx-read-table: read a worksheet region into a JSON table.
  • xlsx-write-table: write an array of objects into an XLSX/XLS sheet.
  • docx-read-paragraphs: extract ordered paragraphs from a DOCX file.
  • docx-write-paragraphs: create or append DOCX paragraphs and an optional table.

Example — read the first worksheet rows from a workbook:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-office.yaml root=./data', tool: xlsx-read-table, params: (path: 'report.xlsx', sheet: 'Finance', startColumn: 'A', startRow: 1, maxRows: 10))"

Example — write a DOCX summary (requires readwrite=true):

oafp in=mcp data="(cmd: 'ojob mcps/mcp-office.yaml root=./docs readwrite=true', tool: docx-write-paragraphs, params: (path: 'summary.docx', paragraphs: ['Weekly summary', (text: 'Status green', style: 'Heading2')], createMissingDirs: true))"

mcp-pass

mcp-pass is a passthrough MCP combiner. You point it at one mainmcp plus zero or more othermcps, and it republishes the union of their tools through a single MCP surface. Unlike mcp-proxy, it does not expose a dispatcher tool; it forwards the downstream tools directly.

Arguments:

  • mainmcp (required): primary MCP connection descriptor.
  • othermcps (optional): array of extra MCP connection descriptors whose tools should be merged in.
  • usesse (optional): when serving over HTTP, return responses as Server-Sent Events.
  • uri (optional): custom HTTP route prefix when serving remotely.

Example — republish one remote MCP plus extra helpers under a single endpoint:

ojob mcps/mcp-pass.yaml onport=9091 \
  mainmcp="(type: remote, url: 'http://localhost:8080/mcp')" \
  othermcps="[(cmd: 'ojob mcps/mcp-time.yaml'), (cmd: 'ojob mcps/mcp-random.yaml')]"

mcp-shell

mcp-shell provides a controlled execution environment for local shell commands. It mirrors Mini-A's built-in allow/deny lists and lets you opt into additional binaries or shell features.

Startup flags:

  • readwrite (default false): Allow commands that may change system state.
  • shellallow: Comma-separated allow-list of commands to unblock.
  • shellbanextra: Additional commands to forbid even if normally allowed.
  • shellallowpipes: Permit pipes, redirects, and control operators.
  • cwd, timeout, env: Set defaults for commands invoked through the MCP.

Exposed tools:

  • shell-exec: Run a single command with optional stdin, cwd, timeout, env, and parseJson toggles.
  • shell-batch: Execute an array of commands (strings or maps) sequentially, inheriting top-level cwd/timeout/env values.

Example — run disk usage diagnostics with an explicit allow-list:

mini-a goal="summarize disk usage" \
  mcp="(cmd: 'ojob mcps/mcp-shell.yaml shellallow=df,du timeout=4000', timeout: 5000)" rpm=20

mcp-s3

mcp-s3 wraps the OpenAF S3 library so the agent can browse buckets, read objects, upload new payloads, or generate pre-signed URLs. The server is read-only unless you explicitly opt into write/delete support.

Key arguments:

  • url, accessKey, secret, region: Connection details for your S3-compatible endpoint (all optional for public buckets).
  • bucket: Default bucket when the tool input omits one.
  • readwrite: Enable write/delete operations (false by default).
  • useversion1, ignorecertcheck: Compatibility flags for legacy or self-hosted endpoints.

Primary tools:

  • s3-list-buckets, s3-list-objects: Enumerate accessible buckets or bucket contents.
  • s3-get-object: Retrieve object data with optional range reads or metadata fetches.
  • s3-put-object, s3-delete-object: Manage objects when readwrite=true.
  • s3-presign-get: Produce temporary GET URLs for sharing or ingestion pipelines.

Example — list JSON reports under a prefix:

mini-a goal="audit nightly reports" \
  mcp="(cmd: 'ojob mcps/mcp-s3.yaml bucket=ops-data prefix=reports/nightly/', timeout: 5000)" rpm=20

Example — upload a processed artifact (write mode):

mini-a goal="publish sanitized metrics" \
  mcp="(cmd: 'ojob mcps/mcp-s3.yaml bucket=ops-data readwrite=true', timeout: 5000)" \
  knowledge="- encode uploads as base64 when calling s3-put-object" rpm=20

mcp-telco

mcp-telco provides telecommunications utilities including country information lookup by calling code and detailed phone number parsing using Google's libphonenumber library.

Arguments:

  • onport (optional): start an HTTP MCP server on the specified port.

Tools:

  • country-by-code: Retrieve country information for a given calling code.
    • Input: code (string, required) - The country calling code without the leading '+' (e.g., "1" for US/Canada).
  • phone-number-info: Parse and analyze phone numbers to extract region, carrier, validity, and formatting details.
    • Input: number (string, required) - Phone number in E.164 or national format (e.g., "+14155552671").
    • Input: country (string, optional, default "US") - The country/region code from which the number is dialed.

Example — look up country information by calling code:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-telco.yaml', tool: country-by-code, params: (code: '44'))"

Example — analyze a phone number:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-telco.yaml', tool: phone-number-info, params: (number: '+14155552671', country: 'US'))"

Example — use with Mini-A to validate phone numbers:

mini-a goal="validate and format the phone number +442071234567" \
  mcp="(cmd: 'ojob mcps/mcp-telco.yaml', timeout: 5000)" rpm=20

mcp-fin

mcp-fin pulls market intelligence from Yahoo Finance. It lazily initialises the bundled apiYFinance.js helper and exposes two deterministic tools:

  • get-ticker-data: Fetch historical price series, ranges, and technical indicators for a given symbol (set raw=true to inspect the untouched Yahoo response).
  • get-ticker-fundamentals: Retrieve company fundamentals (income statement, balance sheet, etc.) with the same optional raw flag.

Example — compare revenue growth across two tickers:

mini-a goal="chart revenue for NVDA vs AMD" \
  mcp="(cmd: 'ojob mcps/mcp-fin.yaml', timeout: 5000)" rpm=20

mcp-ollama-web-search

mcp-ollama-web-search forwards web queries to Ollama's web_search API. It is useful when you want a managed search provider exposed as a simple MCP tool instead of scraping search engines directly.

Arguments:

  • apiKey (required unless OLLAMA_API_KEY is set): Ollama API key.
  • baseUrl (optional, default https://ollama.com): alternate Ollama API base URL.
  • onport (optional): expose the MCP over HTTP.

Tool:

  • web-search: submit a query and optional extra payload options to Ollama's API.

Example — run a search through Ollama:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-ollama-web-search.yaml apiKey=<ollama_api_key>', tool: web-search, params: (query: 'OpenAF MCP server examples'))"

mcp-rss

mcp-rss simplifies monitoring blogs and news feeds. It ships with a curated catalogue (AWS, OpenAI, TechCrunch, etc.) and allows both direct fetches and discovery lookups.

Tools:

  • get-rss-feed: Download and normalise feed items. Accepts nodesc=true to strip descriptions, path to override the item array location, and userAgent to customise the HTTP header.
  • find-rss-url: Search the bundled catalogue for feeds whose names include a query substring.

Example — locate an official feed and pull the latest posts:

mini-a goal="summarize the most recent Azure announcements" \
  mcp="(cmd: 'ojob mcps/mcp-rss.yaml', timeout: 5000)" rpm=20

mcp-web

mcp-web provides web search, URL retrieval, and generic HTTP request capabilities. It performs searches via DuckDuckGo, fetches web pages using jsoup, and can execute direct HTTP requests with $rest.

Arguments:

  • onport (optional): start an HTTP MCP server on the specified port.
  • readwrite (optional, default: false): allows mutating http-request methods (POST, PUT, PATCH, DELETE). Without it, only GET and HEAD are allowed.

Tools:

  • web-search: Search the web and return an array of results with title, description, and link.
    • Input: query (string, required), limit (number, default 12), searchEngine (string, default duckduckgo/ddg).
  • get-url: Fetch and process a single URL.
    • Input: url (string, required), style (enum html | basic | text | map, default basic).
  • http-request: Execute a direct HTTP request and return the raw $rest response map.
    • Input: url (string, required), method (enum GET | HEAD | POST | PUT | PATCH | DELETE, default GET), data (object, optional for POST/PUT/PATCH), headers (object, optional), throwExceptions (boolean, default false).
    • POST/PUT/PATCH/DELETE require starting the MCP with readwrite=true.

Example — search the web (STDIO MCP):

mini-a goal="find the official Rust language blog and summarize the latest post" \
  mcp="(cmd: 'ojob mcps/mcp-web.yaml', timeout: 5000)" rpm=20 __format=md

Example — fetch a URL as text:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-web.yaml', tool: get-url, params: (url: 'https://www.rust-lang.org/', style: 'text'))"

Example — HTTP HEAD request:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-web.yaml', tool: http-request, params: (url: 'https://www.rust-lang.org/', method: 'HEAD'))"

Example — HTTP PATCH request (requires readwrite=true):

oafp in=mcp data="(cmd: 'ojob mcps/mcp-web.yaml readwrite=true', tool: http-request, params: (url: 'https://example.com/api/item/1', method: 'PATCH', data: (status: 'done')))"

Example — run as HTTP MCP server and call remotely:

ojob mcps/mcp-web.yaml onport=9999

oafp in=mcp data="(type: remote, url: 'http://localhost:9999/mcp', tool: web-search, params: (query: 'site:openaf.io jsoup', limit: 5))"

mcp-weather

mcp-weather fronts wttr.in to provide structured weather data (or ANSI forecasts when desired).

Available tool:

  • get-weather: request weather data for a location with optional ansi, oneline, format, or options tweaks.

Example — retrieve the JSON forecast for Lisbon:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-weather.yaml', tool: get-weather, params: (location: 'Lisbon, Portugal'))"

mcp-math

mcp-math provides mathematical operations, statistical analysis, unit conversions, and number properties. All tools are deterministic and read-only.

Available tools:

  • calculate: Perform basic and advanced mathematical operations (add, subtract, multiply, divide, power, sqrt, abs, sin, cos, tan, log, ln, exp, ceil, floor, round).
    • Input: operation (string), values (array of numbers), optional precision (decimal places).
  • statistics: Calculate statistical measures for a dataset (mean, median, mode, stddev, variance, min, max, sum, count, range).
    • Input: values (array of numbers), optional metrics (array of metric names to return).
  • convert-unit: Convert values between units of measurement (length, mass, temperature, volume).
    • Input: value (number), fromUnit (string), toUnit (string), optional precision.
    • Supported units: m, km, mi, ft, in, cm, mm, yd (length); kg, g, lb, oz (mass); c, f, k (temperature); l, ml, gal, qt, pt, cup (volume).
  • number-info: Analyze number properties including prime check, factors, prime factorization, and more.
    • Input: value (number).

Example — perform calculations:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-math.yaml', tool: calculate, params: (operation: 'add', values: [10, 20, 30]))"

Example — calculate statistics:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-math.yaml', tool: statistics, params: (values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))"

Example — convert units:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-math.yaml', tool: convert-unit, params: (value: 100, fromUnit: 'km', toUnit: 'mi', precision: 2))"

Example — analyze number properties:

oafp in=mcp data="(cmd: 'ojob mcps/mcp-math.yaml', tool: number-info, params: (value: 42))"

Example — use with Mini-A for complex math tasks:

mini-a goal="Calculate the mean and standard deviation of temperatures [20, 22, 19, 23, 21] and convert the mean from Celsius to Fahrenheit" \
  mcp="(cmd: 'ojob mcps/mcp-math.yaml', timeout: 5000)" rpm=20 __format=md

Using MCPs as STDIO or HTTP Remote Server

All MCPs in this catalog can be used in two modes:

  • STDIO mode: The MCP is executed directly and communicates via standard input/output.
  • HTTP remote server mode: By providing the onport argument, the MCP will start an HTTP server on the specified port, allowing remote calls.

Example: Running as HTTP remote server

ojob mcps/mcp-db.yaml onport=12345

This will start the MCP on port 12345. You can then interact with it remotely using HTTP requests or by configuring tools to use the remote MCP endpoint.

You can use the same approach for any MCP in the catalog (e.g., mcp-email.yaml, mcp-notify.yaml, mcp-net.yaml).

How to unit test a MCP

STDIO based

List tools:

oafp in=mcp data="(cmd: 'docker run --rm -i mcp/wikipedia-mcp')" inmcptoolslist=true

Call a tool:

oafp in=mcp data="(cmd: 'docker run --rm -i mcp/wikipedia-mcp', tool: extract_key_facts, params: (title: 'Portugal'))"

Remote based

List tools:

oafp in=mcp data="(type: remote, url: 'http://wikipedia.mcps.local:1234/mcp')" inmcptoolslist=true

Call a tool:

oafp in=mcp data="(type: remote, url: 'http://wikipedia.mcps.local:1234/mcp', tool: extract_key_facts, params: (title: 'Portugal'))"

Remember to adjust hostnames, ports, and authentication parameters to match the MCP instance you are testing against.

Repository tests

To execute the full Mini‑A test suite, run the following from the main repository folder:

ojob tests/autoTestAll.yaml

This uses oJob to orchestrate all tests; running from the repo root ensures relative paths resolve correctly.

The test run will produce an autoTestAll.results.json file in the repository. Review it for outcomes and remove it before your final commit.