MCP Server Builder
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
Guide for writing new PACX CLI commands (verbs) following established project conventions.
$ npx skills add neronotte/Greg.Xrm.Command --skill pacx-command-writer -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install neronotte/Greg.Xrm.Command pacx-command-writer --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/neronotte/Greg.Xrm.Command.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/pacx-command-writer .claude/skills/pacx-command-writer && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pacx-command-writer" agent skill from https://github.com/neronotte/Greg.Xrm.Command/tree/master/.github/skills/pacx-command-writer into .claude/skills/pacx-command-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pacx-command-writer", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/neronotte/Greg.Xrm.Command/tree/master/.github/skills/pacx-command-writerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add neronotte/Greg.Xrm.Command --skill pacx-command-writer -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install neronotte/Greg.Xrm.Command pacx-command-writer --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/neronotte/Greg.Xrm.Command.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/pacx-command-writer .agents/skills/pacx-command-writer && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pacx-command-writer" agent skill from https://github.com/neronotte/Greg.Xrm.Command/tree/master/.github/skills/pacx-command-writer into .agents/skills/pacx-command-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pacx-command-writer", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add neronotte/Greg.Xrm.Command --skill pacx-command-writer -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install neronotte/Greg.Xrm.Command pacx-command-writer --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/neronotte/Greg.Xrm.Command.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/pacx-command-writer .cursor/skills/pacx-command-writer && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pacx-command-writer" agent skill from https://github.com/neronotte/Greg.Xrm.Command/tree/master/.github/skills/pacx-command-writer into .cursor/skills/pacx-command-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pacx-command-writer", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/neronotte/Greg.Xrm.Command.git --path .github/skills/pacx-command-writer--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add neronotte/Greg.Xrm.Command --skill pacx-command-writer -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install neronotte/Greg.Xrm.Command pacx-command-writer --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/neronotte/Greg.Xrm.Command.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/pacx-command-writer .gemini/skills/pacx-command-writer && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pacx-command-writer" agent skill from https://github.com/neronotte/Greg.Xrm.Command/tree/master/.github/skills/pacx-command-writer into .gemini/skills/pacx-command-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pacx-command-writer", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install neronotte/Greg.Xrm.Command pacx-command-writerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add neronotte/Greg.Xrm.Command --skill pacx-command-writer -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/neronotte/Greg.Xrm.Command.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/pacx-command-writer .github/skills/pacx-command-writer && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pacx-command-writer" agent skill from https://github.com/neronotte/Greg.Xrm.Command/tree/master/.github/skills/pacx-command-writer into .github/skills/pacx-command-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pacx-command-writer", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add neronotte/Greg.Xrm.Command --skill pacx-command-writer -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install neronotte/Greg.Xrm.Command pacx-command-writer --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/neronotte/Greg.Xrm.Command.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/pacx-command-writer .opencode/skills/pacx-command-writer && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pacx-command-writer" agent skill from https://github.com/neronotte/Greg.Xrm.Command/tree/master/.github/skills/pacx-command-writer into .opencode/skills/pacx-command-writer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pacx-command-writer", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pacx-command-writerGuide for writing new PACX CLI commands (verbs) following established project conventions.
Pacx Command Writer is an agent skill from neronotte/Greg.Xrm.Command. Guide for writing new PACX CLI commands (verbs) following established project conventions. Use this skill when asked to create, scaffold, or add a new command to the Greg.Xrm.Command repository.
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Agent Workflows. The repository describes itself as: Command Line utility for Dataverse. The licence is MIT.
Read from SKILL.md and the folder at commit 236875d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
dotnetFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pacx Command Writer loads about 3k tokens when it runs. Until then it costs about 54 tokens; SKILL.md has 826 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from neronotte/Greg.Xrm.Command at commit 236875d, republished under its MIT licence (© neronotte). 826 words, ~3,013 tokens.
.claude/skills/pacx-command-writer/SKILL.md (or your agent's skills folder).Every PACX command is a pair of files in Greg.Xrm.Command.Core\Commands\<Domain>\. Executors need no manual DI registration: Extensions.RegisterCommandExecutors() auto-scans all ICommandExecutor<T> implementations at startup. Supporting services and repositories must be registered explicitly against their interfaces in IoCModule.
EntityWrapper and a repository to manage the queries. Use Greg.Xrm.Command.Core\Model\WebResource.cs as a reference sample.<Verb>Command.cs (options holder)This class declares CLI options via attributes and optionally handles cross-option validation and usage examples. It must not contain business logic.
using Greg.Xrm.Command.Parsing; // ICanProvideUsageExample, MarkdownWriter
using Greg.Xrm.Command.Services; // MarkdownWriter (via Parsing namespace)
using System.ComponentModel.DataAnnotations; // [Required], IValidatableObject
namespace Greg.Xrm.Command.Commands.<Domain>
{
[Command("<noun>", "<verb>", HelpText = "One-sentence description.")]
[Alias("<verb>", "<noun>")] // only add when reversed order is natural
public class <Verb>Command : IValidatableObject, ICanProvideUsageExample
// ───────────────────────────────── ──────────────────────
// implement only when cross-option implement for non-trivial
// constraints exist commands to aid discoverability
{
// Required options first — low Order values (1, 2, 3…)
[Option("name", "n", Order = 1, HelpText = "...")]
[Required]
public string? Name { get; set; }
// Optional options — grouped by concern, higher Order values
[Option("description", "d", Order = 10, HelpText = "...")]
public string? Description { get; set; }
// Solution is always last (Order = 50+)
[Option("solution", "s", Order = 50, HelpText = "Unmanaged solution name. Uses the current default solution if omitted.")]
public string? SolutionName { get; set; }
// Cross-option validation only — single-option guards go in the executor
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (/* mutually exclusive condition */)
yield return new ValidationResult("...", new[] { nameof(OptionA), nameof(OptionB) });
}
public void WriteUsageExamples(MarkdownWriter writer)
{
writer.WriteParagraph("Minimal usage:");
writer.WriteCodeBlock("pacx <noun> <verb> --name \"value\"", "Powershell");
}
}
}[Option] conventions| Property | Rule |
|---|---|
longName | camelCase — e.g. schemaName, displayName, requiredLevel |
shortName | Short abbreviation, unique within the command — e.g. "n", "sn", "par" |
HelpText | Always set — shown in pacx help and interactive mode |
Order | Required options: 1–9; grouped optional options: 10–49; --solution: 50+ |
DefaultValue | Set on the attribute when there is a meaningful default the user should see |
[Required] | Mark all mandatory options |
[Command] and [Alias] conventions[Command] is always noun first: [Command("table", "create", ...)].[Alias] reverses the order when natural: [Alias("create", "table")].[Alias] when the reversed form is genuinely useful.<Verb>CommandExecutor.cs (business logic)using Greg.Xrm.Command.Services.Connection;
using Greg.Xrm.Command.Services.Output;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using System.ServiceModel; // FaultException<OrganizationServiceFault>
namespace Greg.Xrm.Command.Commands.<Domain>
{
public class <Verb>CommandExecutor(
IOutput output,
IOrganizationServiceRepository organizationServiceRepository) : ICommandExecutor<<Verb>Command>
{
public async Task<CommandResult> ExecuteAsync(<Verb>Command command, CancellationToken cancellationToken)
{
// Step 1 — always connect first
output.Write("Connecting to the current dataverse environment...");
var crm = await organizationServiceRepository.GetCurrentConnectionAsync();
output.WriteLine("Done", ConsoleColor.Green);
try
{
// Step 2 — resolve default solution when the option is omitted
var solutionName = command.SolutionName;
if (string.IsNullOrWhiteSpace(solutionName))
{
solutionName = await organizationServiceRepository.GetCurrentDefaultSolutionAsync();
if (solutionName == null)
return CommandResult.Fail("No solution name provided and no current solution name found in the settings.");
}
// Step 3 — report each logical step inline
output.Write("Performing the operation...");
var request = new OrganizationRequest(/* ... */);
var response = await crm.ExecuteAsync(request);
output.WriteLine(" Done", ConsoleColor.Green);
// Step 4 — return success with key output values
var result = CommandResult.Success();
result["EntityId"] = response./* ... */;
return result;
}
catch (FaultException<OrganizationServiceFault> ex)
{
return CommandResult.Fail(ex.Message, ex);
}
}
// Non-trivial computations go in private static helpers to keep ExecuteAsync readable
private static string ComputeSchemaName(string displayName, string publisherPrefix)
{
// ...
}
}
}Greg.Xrm.Command.Commands namespaces limited to commands, command executors, and command-specific helpers. Put supporting service implementations and their interfaces under Greg.Xrm.Command.Services (with a domain subnamespace when useful), and models/repositories and their interfaces under Greg.Xrm.Command.Model. Never place services or their contracts in a command folder or namespace.IoCModule (for example builder.RegisterType<Team.Repository>().As<ITeamRepository>()). Apply this rule to supporting services' constructor dependencies as well. Delegate executors through ICommandExecutor<TCommand>. Do not instantiate dependencies or bypass injection with static methods that perform I/O; expose those operations through the injected interface. This is mandatory so executor unit tests can mock dependencies and run entirely locally. Pure static formatting/computation helpers are allowed.CommandRunnerBase) validates DataAnnotations and IValidatableObject before calling an executor. Do not call Validator.TryValidateObject again in executors or duplicate command validation there. Declare input constraints on the command; keep only business checks requiring resolved data (for example whether a privilege supports a depth) in the executor. Tests for command validation belong in the command test file, not in tests that invoke the executor directly.Console directly — always use IOutput.IAnsiConsole from Greg.Xrm.Command.Services.Output, which wraps Spectre.Console functionality.output.Write("Step…") → do async work → output.WriteLine(" Done", ConsoleColor.Green).output.Write(command.SchemaName, ConsoleColor.Yellow).--solution via organizationServiceRepository.GetCurrentDefaultSolutionAsync().FaultException<OrganizationServiceFault> at minimum. Catch Exception when non-Dataverse failures are possible.private static helper methods.CommandResult with key/value output pairs for structured consumers.CommandResult output values must be scalars (strings, numbers, booleans, GUIDs), never arrays or collection objects: the CLI renders them via ToString() and displays .NET type names instead of their contents. Render detailed collections through IOutput.WriteTable and return counts or explicitly formatted summary strings. Keep collection-based view models internal; tests can inspect service results or capture table rows, rather than requiring collections in command output parameters.Once the command and executor files are in place, use the pacx-unit-test-writer skill to generate the corresponding test files.
<Verb>Command.cs placed in Greg.Xrm.Command.Core\Commands\<Domain>\[Command] verbs are noun-first: "<noun>", "<verb>"[Alias] added only when the reversed order is useful[Option] have HelpText, sensible Order, DefaultValue where applicable[Required]IValidatableObject.Validate() implemented only for cross-option constraintsICanProvideUsageExample.WriteUsageExamples() implemented for non-trivial commands<Verb>CommandExecutor.cs placed in the same domain folderServices; models/repositories and their interfaces live under Model, not in CommandsIoCModule; no concrete injected types or static I/O bypassesIOutput for all console output (never Console.Write*)Write(…) / WriteLine(" Done", Green)) used for each stepFaultException<OrganizationServiceFault> caught and mapped to CommandResult.FailCommandResult populated with key output valuesCommandResult contains only scalar output values, no arrays or collectionspacx-unit-test-writer skilldotnet build passesdotnet test Greg.Xrm.Command.Core.TestSuite\Greg.Xrm.Command.Core.TestSuite.csproj passes© neronotte, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .github/skills/pacx-command-writer of neronotte/Greg.Xrm.Command.
Open the folder on GitHubat commit 236875d
Pacx Command Writer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pacx Command Writer this skillneronotte/Greg.Xrm.Command | 150 | — | ~3k | Automated safety check: Pass | MIT | |
| MCP Server Builderanthropics/skills | 180k | 64 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| Hook Development for Claude Code Pluginsanthropics/claude-plugins-official | 38k | 11 repos | ~4.1k | Automated safety check: Notes | Apache-2.0 | |
| Using Superpowersfarm-fe/farm | 5.6k | 35 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Executing Plans Inlineobra/superpowers | 296k | 2 repos | ~5.1k | Automated safety check: Pass | MIT | |
| Claude Code Agent Developmentanthropics/claude-plugins-official | 38k | 8 repos | ~2.8k | Automated safety check: Pass | Apache-2.0 |
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
anthropics/claude-plugins-official
Explains how to write Claude Code plugin hooks, both prompt-based checks and bash commands, for events such as PreToolUse, Stop and SessionStart.
farm-fe/farm
A skill your agent uses when starting any conversation - establishes how to find and use skills, requiring Skill tool invocation before ANY response including clarifying questions
obra/superpowers
Has the agent carry out an implementation plan itself, task by task in the current session, keeping a ledger, proving each step with a test and ending with one whole-branch review.
anthropics/claude-plugins-official
Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.
Azure/azqr
Create new skills, modify and improve existing skills, and measure skill performance.
neronotte/Greg.Xrm.Command
Guide for writing local unit tests for PACX commands without relying on external services.
Categories
Guide for writing new PACX CLI commands (verbs) following established project conventions. Command. Guide for writing new PACX CLI commands (verbs) following established project conventions.
Pacx Command Writer fits situations like: asked to create; add a new command to the Greg.Xrm.Command repository.
Run `npx skills add neronotte/Greg.Xrm.Command --skill pacx-command-writer -a claude-code`. Or copy the skill folder (.github/skills/pacx-command-writer in neronotte/Greg.Xrm.Command) into .claude/skills/pacx-command-writer in your project. Claude Code loads it when a task matches its description.
Run `npx skills add neronotte/Greg.Xrm.Command --skill pacx-command-writer -a codex`. Or copy the skill folder (.github/skills/pacx-command-writer in neronotte/Greg.Xrm.Command) into .agents/skills/pacx-command-writer in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add neronotte/Greg.Xrm.Command --skill pacx-command-writer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pacx-command-writer, .gemini/skills/pacx-command-writer, .github/skills/pacx-command-writer and .opencode/skills/pacx-command-writer in your project.
Going by SKILL.md and its folder, Pacx Command Writer needs the command-line tools its instructions call (dotnet).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Pacx Command Writer is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pacx Command Writer: MCP Server Builder (anthropics/skills, 180k stars), Hook Development for Claude Code Plugins (anthropics/claude-plugins-official, 38k stars), Using Superpowers (farm-fe/farm, 5.6k stars) and Executing Plans Inline (obra/superpowers, 296k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
neronotte (a GitHub user) maintains it in neronotte/Greg.Xrm.Command, which has 150 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 4, 2026.
Source: neronotte/Greg.Xrm.Command on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.