To view an iCalendar (text/calendar, .ics, RFC 5545) attachment with
mhshow or mhn, all I had to do was install calcurse
(http://www.calcurse.org/), set it up once, and add this to my
profile:

#: With mhshow, the following just views the calendar attachment.
#: With mhn, it inserts it into my personal calcurse calendar.
#: calcurse must be set up before or at first use.  To set up beforehand,
#:   either run it without any arguments and then "qqqy", or:
#:   $ echo qqqy | calcurse
#: The range of 60 is in days:  anything after that range (or before the
#:   current date) won't be shown.
#: The grep of TZID works around a current (v. 3.1.4) calcurse
#:   deficiency:  it doesn't support timezones.
#: The | cat below allows a sequence of shell commands.
mhshow-show-text/calendar:
  %lcalcurse -c /dev/null --read-only --import '%F' --range=60 --todo | cat;
  calcurse --gc;
  grep TZID: '%F'
mhn-show-text/calendar:
  %lcalcurse --import '%F' | cat;
  grep TZID: '%F'


To create and send out a calendar request:
  1) Launch calcurse and create the calendar request.
  2) Export the calendar request to a file, either using the
     "x" command from within interactive calcurse or using the
     -x/--export command-line option.  The output filename
     should have an extension of .ics if you'll use send -attach.
  3) For compatibility with MS Outlook, edit the calendar
     request file and insert this line into the VCALENDAR
     section:
METHOD:REQUEST
     and insert this line into the VEVENT section:
UID:<uid string>
     where <uid string> should be unique.

     If you insert the following 5 lines just before the
     END:VEVENT line, it will enable alarms for recipients who
     have support for them:
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
END:VALARM
  4) Attach the calendar request file to a message.  With
     mhbuild, be sure to specify a Content-Disposition type
     of "inline", using {inline}.  The send -attach support
     handles this properly.


To respond to a calendar request:
  1) Store the calendar request in a file using, e.g.,
     mhstore -type text/calendar
  2) Edit the calendar request, changing the METHOD and your
     ATTENDEE lines to look like:
METHOD:REPLY
ATTENDEE;PARTSTAT=<action>;MAILTO:<your email address>
     where <action> is one of ACCEPTED, DECLINED, TENTATIVE,
     or DELEGATED (or COMPLETED or IN-PROCESS for to-do's).
  3) Send that edited request by attaching it to a reply to
     the meeting requestor; see last step under "To create and
     send out a calendar request" above.
